【发布时间】:2017-10-31 03:53:12
【问题描述】:
有人能解释一下为什么在 Elixir 中需要“捕获运算符”,表示为 & 前缀吗?在其他语言中它不是:
Python 3.6.0 |Anaconda 4.3.0 (64-bit)| (default, Dec 23 2016, 12:22:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
>>> def double(x):
... return(x + x)
...
>>> double(2)
4
>>> dbl = double
>>> dbl(2)
4
显然,这在 Elixir 中同样有效:
iex(2)> double = fn x -> x + x end
#Function<6.118419387/1 in :erl_eval.expr/5>
iex(3)> double.(2)
4
iex(4)> dbl = double
#Function<6.118419387/1 in :erl_eval.expr/5>
iex(5)> dbl.(2)
4
那么为什么,例如here,如果函数已经可以在没有所述操作符的情况下传递,我们还需要使用捕获操作符吗?函数的普通旧名称不是已经“捕获”它了吗?
iex(10)> Enum.map([1, 2, 3], double)
[2, 4, 6]
基本上,我不了解 & 捕获运算符的用例以及它提供的优势。
【问题讨论】:
-
也许是这样,您可以通过
/1/2等后缀符号包含参数的数量,否则会被解释为除法。在函数式语言中,当参数的数量和类型发生变化时,函数可以是完全不同的声明。
标签: elixir