Erlang - 匿名函数



匿名函数用于在 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) 的高阶函数。

  • Adder 函数 fun(X) 引用了另一个函数 fun(Y)。

当我们运行以上程序时,我们将得到以下结果。

输出

16
广告