Fun用于在Erlang中定義匿名函數(shù)。匿名函數(shù)的一般語法如下:
F = fun (Arg1, Arg2, ... ArgN) -> ... End
說明
F ?這是分配給匿名函數(shù)的變量名。
Arg1, Arg2, ... ArgN ?這些是傳遞給匿名函數(shù)的參數(shù)。
以下示例展示了如何使用匿名函數(shù)。
-module(helloworld). -export([start/0]). start() -> A = fun() -> io:fwrite("Hello") end, A().
關(guān)于上述程序,需要注意以下幾點。
匿名函數(shù)被分配給變量A。
通過變量的匿名函數(shù)A()。
當我們運行上面的程序時,我們將得到以下結(jié)果。
“Hello”
匿名函數(shù)的另一個示例如下,但這是使用參數(shù)的。
-module(helloworld). -export([start/0]). start() -> A = fun(X) -> io:fwrite("~p~n",[X]) end, A(5).
當我們運行上面的程序時,我們將得到以下結(jié)果。
5
匿名函數(shù)具有訪問匿名函數(shù)范圍之外的變量的能力。讓我們看一個實例-
-module(helloworld). -export([start/0]). start() -> B = 6, A = fun(X) -> io:fwrite("~p~n",[X]), io:fwrite("~p~n",[B]) end, A(5).
關(guān)于上述程序,需要注意以下幾點。
變量B在匿名函數(shù)的范圍之外。
匿名函數(shù)仍然可以訪問在全局范圍內(nèi)定義的變量。
當我們運行上面的程序時,我們將得到以下結(jié)果。
5 6
高階函數(shù)的另一個最強大的方面之一是,您可以在函數(shù)中定義一個函數(shù)。讓我們來看一個如何實現(xiàn)此目標的示例。
-module(helloworld). -export([start/0]). start() -> Adder = fun(X) -> fun(Y) -> io:fwrite("~p~n",[X + Y]) end end, A = Adder(6), A(10).
關(guān)于上述程序,需要注意以下幾點。
加法器是一個高階函數(shù),定義為fun(X)。
加法器函數(shù)fun(X)引用了另一個函數(shù)fun(Y)。
當我們運行上面的程序時,我們將得到以下結(jié)果。
16