Elixir 匿名函數(shù)

2023-12-14 16:18 更新

函數(shù)被包含在和之間:?fn??end?

iex> add = fn a, b -> a + b end
#Function<12.71889879/2 in :erl_eval.expr/5>
iex> is_function(add)
true
iex> is_function(add, 2)
true
iex> is_function(add, 1)
false
iex> add.(1, 2)
3

在Elixir中,函數(shù)是“一等公民”,意味著它們可以像整數(shù)和字符串一樣被當(dāng)作參數(shù)傳遞給其它函數(shù)。例如,我們將變量中的函數(shù)傳遞給函數(shù),得到返回值。我們也可以調(diào)用來檢查函數(shù)的參數(shù)個(gè)數(shù)。?add??is_function/1??true??is_function/2?

注意在調(diào)用匿名函數(shù)時(shí)變量名與括號(hào)間必須要有一個(gè)點(diǎn)()。?.?

匿名函數(shù)是閉包,因此它們可以獲取在函數(shù)定義時(shí)所包含的變量。讓我們來定義一個(gè)新的匿名函數(shù),它使用了我們之前定義的匿名函數(shù):?add?

iex> double = fn a -> add.(a, a) end
#Function<6.71889879/1 in :erl_eval.expr/5>
iex> double.(2)
4

記住函數(shù)中賦值的變量不會(huì)影響其外部環(huán)境:

iex> x = 42
42
iex> (fn -> x = 0 end).()
0
iex> x
42

捕獲語句也可以被用于創(chuàng)建匿名函數(shù)。這種語法會(huì)在第八章討論。?&()?


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)