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
廣告

© . All rights reserved.