Funs
优质
小牛编辑
131浏览
2023-12-01
Funs用于在Erlang中定义匿名函数。 匿名函数的一般语法如下 -
语法 (Syntax)
F = fun (Arg1, Arg2, ... ArgN) ->
...
End
哪里
F - 这是分配给匿名函数的变量名。
Arg1, Arg2, ... ArgN - 这些是传递给匿名函数的参数。
以下示例展示了如何使用匿名函数。
例子 (Example)
-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).
当我们运行上述程序时,我们将得到以下结果。
输出 (Output)
5
使用变量
匿名函数能够访问匿名函数范围之外的变量。 让我们看看这个例子 -
例子 (Example)
-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超出了匿名函数的范围。
匿名函数仍然可以访问全局范围中定义的变量。
当我们运行上述程序时,我们将得到以下结果。
输出 (Output)
5
6
Functions within Functions
高阶函数的另一个最强大的方面是,您可以在函数内定义函数。 让我们看一个如何实现这一目标的例子。
例子 (Example)
-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)的高阶函数。
Adder函数fun(X)引用另一个函数fun(Y)。
当我们运行上述程序时,我们将得到以下结果。
输出 (Output)
16