📅  最后修改于: 2020-11-04 05:57:47             🧑  作者: Mango
Fun用于在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).
关于上述程序,需要注意以下几点。
加法器是定义为fun(X)的高阶函数。
加法器函数fun(X)引用了另一个函数fun(Y)。
当我们运行上面的程序时,我们将得到以下结果。
16