Error/confusion 使用管道与函数调用时
Error/confusion when using pipe vs function call
到目前为止,在我尝试制作皮诺克尔甲板的过程中,我有
deck = for rank <- ['2','3','4','5','6','7','8','9','T','J','Q','K','A',], suit <- ['C','D','H','S'], blackwhite <- ['B','W'], do: %{suit: suit, rank: rank, blackwhite: blackwhite}
|> Enum.shuffle
但是,随机播放部分似乎是随机播放地图的内部部分而不是地图本身。但是,当关闭
的管道时
Enum.shuffle(deck)
我得到了预期的结果。一如既往地想知道这是什么原因,有没有更好的方法。
由于运算符的优先级,这是预期的行为。 |>/2
is an operator and operators precede 宏调用。基本上,管道与下面示例中的乘法运算符具有相同的优先级,这就是为什么它应用于映射,而不是 for/1
调用的结果。
for i <- [1, 2, 3], do: i * 2
要实现所需的功能,请使用括号。
deck =
(for rank <- [...], suit <- [...], blackwhite <- [...],
do: %{suit: suit, rank: rank, blackwhite: blackwhite})
|> Enum.shuffle
到目前为止,在我尝试制作皮诺克尔甲板的过程中,我有
deck = for rank <- ['2','3','4','5','6','7','8','9','T','J','Q','K','A',], suit <- ['C','D','H','S'], blackwhite <- ['B','W'], do: %{suit: suit, rank: rank, blackwhite: blackwhite}
|> Enum.shuffle
但是,随机播放部分似乎是随机播放地图的内部部分而不是地图本身。但是,当关闭
的管道时Enum.shuffle(deck)
我得到了预期的结果。一如既往地想知道这是什么原因,有没有更好的方法。
由于运算符的优先级,这是预期的行为。 |>/2
is an operator and operators precede 宏调用。基本上,管道与下面示例中的乘法运算符具有相同的优先级,这就是为什么它应用于映射,而不是 for/1
调用的结果。
for i <- [1, 2, 3], do: i * 2
要实现所需的功能,请使用括号。
deck =
(for rank <- [...], suit <- [...], blackwhite <- [...],
do: %{suit: suit, rank: rank, blackwhite: blackwhite})
|> Enum.shuffle