Elixir 匿名函数

2023-12-14 16:18 更新

函数被包含在和之间:​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中,函数是“一等公民”,意味着它们可以像整数和字符串一样被当作参数传递给其它函数。例如,我们将变量中的函数传递给函数,得到返回值。我们也可以调用来检查函数的参数个数。​add​is_function/1​true​is_function/2

注意在调用匿名函数时变量名与括号间必须要有一个点()。​.

匿名函数是闭包,因此它们可以获取在函数定义时所包含的变量。让我们来定义一个新的匿名函数,它使用了我们之前定义的匿名函数:​add

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

记住函数中赋值的变量不会影响其外部环境:

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

捕获语句也可以被用于创建匿名函数。这种语法会在第八章讨论。​&()


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号