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