匿名函式

在 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 會嘗試將你提供的引數與正確的函式體相匹配。