Elixir &符号是什么意思?

来源:互联网 发布:kdl 55w800a 装软件 编辑:程序博客网 时间:2024/04/30 15:35

在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)45iex> square = &(&1 * &1)#Function<6.17052888 in :erl_eval.expr/5>iex> square.(8)64iex> speak = &(IO.puts(&1))&IO.puts/1iex> 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/1iex> l.([1,3,5,7])4iex> len = &Enum.count/1&Enum.count/1iex> len.([1,2,3,4])4iex> m = &Kernel.min/2 # This is an alias for the Erlang function&:erlang.min/2iex> m.(99,88)88
0 0