刚开始我的Elixir之旅.在书中读到这个:
"&运算符将后面的表达式转换为函数."
好吧,我想我明白了......
iex(70)> f = &(&1 * &2)
#Function<12.80484245 in :erl_eval.expr/5>
iex(72)> f.(2,3)
6
Run Code Online (Sandbox Code Playgroud)
好的,&符号是匿名函数的简写及其参数.但是,为什么下次通话不起作用?!
iex(73)> &(&1 * &2).()
#Function<12.80484245 in :erl_eval.expr/5>
Run Code Online (Sandbox Code Playgroud)
......我可以继续这样看待永远:
iex(76)> &(&1 * &2).().().()
#Function<12.80484245 in :erl_eval.expr/5>
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?
sas*_*ric 14
如果用括号包装匿名函数,它将起作用:
iex(1)> (&(&1 * &2)).()
** (BadArityError) &:erlang.*/2 with arity 2 called with no arguments
Run Code Online (Sandbox Code Playgroud)
错误是预期的,因为我们称零参数为2 arity fun.如果我们传递两个数字,我们应该看到它们相乘:
iex(2)> (&(&1 * &2)).(2,3)
6
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5948 次 |
| 最近记录: |