Elixir 通过管道传输到Enum.into的范围引发警告

Elixir 通过管道传输到Enum.into的范围引发警告,elixir,Elixir,我有一个范围要传送到Enum.into[],该范围会引发警告。这里怎么了 iex(1)> 1..5 |> Enum.into ([]) warning: you are piping into a function call without parentheses... 加括号后 iex(2)> (1..5) |> Enum.into ([]) warning: you are piping into a function call without parenthes

我有一个范围要传送到Enum.into[],该范围会引发警告。这里怎么了

iex(1)> 1..5 |> Enum.into ([]) 
warning: you are piping into a function call without parentheses...
加括号后

iex(2)> (1..5) |> Enum.into ([])
warning: you are piping into a function call without parentheses...

要消除此警告,请在整个Enum.into shebang中加上括号:

我不能100%确定为什么长生不老药会在这里抱怨;警告提到

 foo 1 |> bar 2 |> baz 3
应改写为

 foo(1) |> bar(2) |> baz(3)

据我所知,这正是你所做的。可能与Enum.into部分应用于[]有关。

问题在于Enum.into参数周围的空格。它不会被解释为函数调用的括号,而是作为围绕其中一个参数的分组机制。函数名和参数之间不允许有空格


1..5 |>Enum.into[]与1..5 |>Enum.into[]相同,如果我们填充编译器抱怨的缺少的括号。您想要的可能是1..5 |>Enum.into[],这是一个正确的调用,编译器不会对此抱怨。

当使用单个元素时,是否知道为什么Enumerable没有为90实现。e、 g.90 |>Enum.into[]相当于调用Enum.into90,[]。Enum中大多数函数的第一个参数必须实现可枚举协议。整数不能实现它-可枚举是指由多个其他值组成的值。整数只是一个值,为它们实现可枚举性是没有意义的。正如Michal Muskala指出的问题是函数名和参数之间的空间。
 foo(1) |> bar(2) |> baz(3)