匿名函数

在 Elixir 中,通常的做法是使用匿名函数。创建匿名函数很简单:

iex(1)> my_func = fn x -> x * 2 end
#Function<6.52032458/1 in :erl_eval.expr/5>

一般语法是:

fn args -> output end

为了便于阅读,你可以在参数周围加上括号:

iex(2)> my_func = fn (x, y) -> x*y end
#Function<12.52032458/2 in :erl_eval.expr/5>

要调用匿名函数,请使用指定的名称调用它,并在名称和参数之间添加 .

iex(3)>my_func.(7, 5)
35

可以在没有参数的情况下声明匿名函数:

iex(4)> my_func2 = fn -> IO.puts "hello there" end
iex(5)> my_func2.()
hello there
:ok

使用捕获运算符

为了使匿名函数更简洁,你可以使用捕获运算符 &。例如,而不是:

iex(5)> my_func = fn (x) -> x*x*x end

你可以写:

iex(6)> my_func = &(&1*&1*&1)

使用多个参数,使用与每个参数对应的数字,从 1 开始计算:

iex(7)> my_func = fn (x, y) -> x + y end

iex(8)> my_func = &(&1 + &2)   # &1 stands for x and &2 stands for y

iex(9)> my_func.(4, 5)
9

多个身体

匿名函数也可以有多个实体(作为模式匹配的结果 ):

my_func = fn
  param1 -> do_this
  param2 -> do_that
end

当你调用具有多个实体的函数时,Elixir 会尝试将你提供的参数与正确的函数体相匹配。