Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 什么';这个匿名函数语法是怎么回事?_Elixir - Fatal编程技术网

Elixir 什么';这个匿名函数语法是怎么回事?

Elixir 什么';这个匿名函数语法是怎么回事?,elixir,Elixir,刚刚开始我的长生不老药之旅。在书中阅读: “运算符将后面的表达式转换为函数。” 好的,我想我明白了 iex(70)> f = &(&1 * &2) #Function<12.80484245 in :erl_eval.expr/5> iex(72)> f.(2,3) 6 iex(70)>f=&1*&2 #作用 iex(72)>f.(2,3) 6. 好的,符号是匿名函数及其参数的缩写。但是,为什么下一个电话不起作用 iex(73)> &am

刚刚开始我的长生不老药之旅。在书中阅读:

“运算符将后面的表达式转换为函数。”

好的,我想我明白了

iex(70)> f = &(&1 * &2)
#Function<12.80484245 in :erl_eval.expr/5>
iex(72)> f.(2,3)
6
iex(70)>f=&1*&2
#作用
iex(72)>f.(2,3)
6.
好的,符号是匿名函数及其参数的缩写。但是,为什么下一个电话不起作用

iex(73)> &(&1 * &2).() 
#Function<12.80484245 in :erl_eval.expr/5>
iex(73)>&(&1*&2)。()
#作用
…我似乎可以永远这样做:

iex(76)> &(&1 * &2).().().()
#Function<12.80484245 in :erl_eval.expr/5>
iex(76)>&(&1*&2)。()
#作用

这是怎么回事?

如果用括号括住匿名函数,它将工作:

iex(1)> (&(&1 * &2)).()
** (BadArityError) &:erlang.*/2 with arity 2 called with no arguments
这个错误是意料之中的,因为我们称之为零参数的2算术乐趣。如果我们传递两个数字,我们应该看到它们相乘:

iex(2)> (&(&1 * &2)).(2,3)
6

澄清一下,这不是一个bug,您的解决方案是正确的!点的优先级比&on的优先级高,所以你可以写一些东西,比如:Enum.map(users,&&1.name)啊,所以op的表达式等价于&(&1*&2)。()?是的,它们是等价的@正如何塞解释的那样,点(.)具有更高的优先级。这意味着点在被考虑之前就被应用了,所以把所有的东西都变成了λ。因此,重复的堆叠只相当于返回函数的&(&1*&2)。()。()。())。将其视为IO.puts 3*3*3的类似物-在应用IO.puts之前应用乘法。底线:如果不确定-请使用parens:-)对@sasajuri所写内容的另一个小澄清:“&(&1*&2)。()。()。()”返回两个参数的函数,因此它是一个正确的表达式,但函数在调用时将失败,因为(&1*&2)不返回函数,因此无法被调用(通过成功的方式)。(()):iex(1)>(&(&1*&2)。().())(3,3)**(BadFunctionError)需要一个函数,得到:9