这个匿名函数语法有什么用?

时间:2014-04-29 07:03:54

标签: elixir

刚开始我的Elixir之旅。在书中读到这个:

  

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

好吧,我想我得到了......

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

iex(73)> &(&1 * &2).() 
#Function<12.80484245 in :erl_eval.expr/5>

......我可以继续这样做:

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

这里发生了什么?

1 个答案:

答案 0 :(得分:14)

如果用括号包装匿名函数,它将起作用:

iex(1)> (&(&1 * &2)).()
** (BadArityError) &:erlang.*/2 with arity 2 called with no arguments

错误是预料之中的,因为我们称零参数为2 arity fun。如果我们传递两个数字,我们应该看到它们相乘:

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