2

在elixir中创建短小的帮助函数是非常频繁的工作,elixir提供了一个方便的机制,让我们先使用,然后再解释一下他的意义。

iex> add_one = &(&1 + 1) # same as add_one = fn (n) -> n + 1 end
#Function<6.17052888 in :erl_eval.expr/5>
iex> add_one.(44)
45
iex> square = &(&1 * &1)
#Function<6.17052888 in :erl_eval.expr/5>
iex> square.(8)
64
iex> speak = &(IO.puts(&1))
&IO.puts/1
iex> speak.("Hello")
Hello
:ok

&符号将里面的表达式转换成函数。在表带是里面的替换符&1,&2等此类标量,代表函数的第一个参数,第二个参数等,所以&(&1 + &2)将会转换成fn a, b -> a + b end

elixir是足够简介的,例如&(IO.puts(&1))会生成匿名函数fn x -> IO.puts(x) end。Elixir注意到函数体仅仅是简单的调用IO模块的puts函数,elixir优化该匿名函数,可以使用&IO.puts/1
更多实例:

iex> l = &length/1
&:erlang.length/1
iex> l.([1,3,5,7])
4
iex> len = &Enum.count/1
&Enum.count/1
iex> len.([1,2,3,4])
4
iex> m = &Kernel.min/2 # This is an alias for the Erlang function
&:erlang.min/2
iex> m.(99,88)
88

天赢金创
338 声望21 粉丝

天赢金创,天赢金创,天赢金创,天赢金创,天赢金创,天赢金创天赢金创,天赢金创