2016-08-01 36 views
2

我有一个范围,我管道Enum.into ([])引发警告。这里有什么问题?范围管道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... 

回答

4

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

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

+0

任何想法为什么'使用单个元素时抛出不能实现90''。例如'90 |> Enum.into([])' – Bala

+0

这相当于调用'Enum.into(90,[])''。来自'Enum'的大多数函数的第一个参数必须实现'Enumerable'协议。整数不实现它 - enumerable关于由多个其他值组成的值。整数只是一个值,对它们实现'Enumerable'没有任何意义。 – michalmuskala

0

之后为了摆脱的警告,把你的括号围绕整个Enum.into家当:

(1..5) |> (Enum.into []) 

我不是100%肯定,为什么药剂抱怨这里;该警告提到

foo 1 |> bar 2 |> baz 3 

应该被改写为

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

它 - 我的理解 - 是你做了什么。可能与Enum.into[]的部分应用有关。

+0

问题(如Michal Muskala指出的)是函数名称和参数之间的空格。 –

相关问题