在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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。