目录

Erlang - Funs

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
↑回到顶部↑
WIKI教程 @2018