Erlang - Funs 方法
Funs 用于在 Erlang 中定义匿名函数。 匿名函数的一般语法如下−
语法
F = fun (Arg1, Arg2, ... ArgN) -> ... End
其中
F − 这是分配给匿名函数的变量名。
Arg1, Arg2, ... ArgN − 这些是传递给匿名函数的参数。
以下示例展示了如何使用匿名函数。
示例
-module(helloworld). -export([start/0]). start() -> A = fun() -> io:fwrite("Hello") end, A().
上述程序需要注意以下事项。
将匿名函数赋值给变量A。
通过变量 A() 的匿名函数。
当我们运行上面的程序时,将得到以下结果。
“Hello”
匿名函数的另一个例子如下,但这是使用参数的。
-module(helloworld). -export([start/0]). start() -> A = fun(X) -> io:fwrite("~p~n",[X]) end, A(5).
当我们运行上面的程序时,将得到以下结果。
输出
5
使用变量
匿名函数能够访问匿名函数范围之外的变量。 让我们看一个例子 −
示例
-module(helloworld). -export([start/0]). start() -> B = 6, A = fun(X) -> io:fwrite("~p~n",[X]), io:fwrite("~p~n",[B]) end, A(5).
上述程序需要注意以下事项。
变量 B 超出了匿名函数的范围。
匿名函数仍然可以访问全局作用域中定义的变量。
当我们运行上面的程序时,将得到以下结果。
输出
5 6
函数内的函数
高阶函数的其他最强大的方面之一是您可以在函数中定义函数。 让我们看一个例子来说明如何实现这一目标。
示例
-module(helloworld). -export([start/0]). start() -> Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end, A = Adder(6), A(10).
上述程序需要注意以下事项。
Adder 是一个高阶函数,定义为 fun(X)。
加法器函数 fun(X) 引用了另一个函数 fun(Y)。
当我们运行上面的程序时,将得到以下结果。
输出
16