Erlang中的fun函式使用詳解

2021-07-30 07:56:55 字數 1691 閱讀 5318

先看乙個erlang的規定:在eralng中,同乙個模組中的兩個函式,如果她們同名但是它們的目(arity)不同,這樣的兩個函式被認為是完全不同的兩個函式。通常情況下,這樣的函式被用作輔助函式。

fun函式就是乙個匿名函式(因為他自己沒有名字),但就這個匿名函式,用處卻是很大的。fun既可以作為函式的引數,也可以作為函式(或者自己本身fun)的返回結果。

現在,我們再來看一下fun函式的簡單使用:

4> triple = fun(x)

-> 3*x end.

#fun

5> triple(3).9

6>

當我們定乙個fun的時候,會出現#fun>

之類的東西,我自己也不清楚,不過先不要管這個。我們繼續往下看。

triple = fun(x) -> 3*x end.

是定義乙個fun,只有乙個參數量,也就是只有乙個目,在fun結束的時候,需要將end加在後面的。當我們要呼叫它的時候,直接使用triple,然後加上引數就行了。

注:本部落格的例子可能許多都是來自joe armstrong的《erlang程式設計》一書,或者在原來基礎上稍加改變。

我們再來詳細的學習這個fun:

1.用fun作為函式的引數

上面的例子是只有乙個引數,相信大家都能看懂。現在看一下使用多個引數時的情景。

1> hypot = fun(x, y)

-> math:

sqrt

(x*x + y*y) end.

#fun

2> hypot(3, 4)

.5.0

3>

很容易看懂吧,其中的math是乙個模組,sqrt是其中的乙個函式,是用來計算平方根的。

fun也可以有若干個不同的子句。

比如下面的星期轉換:

3> week = fun()-

>

;3>()

->

3> end.

#fun

5> week().

6>

2.以fun作為引數的函式

lists是標準庫中的乙個模組,從中匯出的很多函式都是以fun作為引數的函式,比如,map,filter等。下面是乙個測試:

1> l =

[1, 2, 3, 4]

.[1,2,3,4]

2>

double

= fun(x)

-> 2*x end.

#fun

3> lists:

map(

double

, l)

.[2,4,6,8]

4> even = fun(x)

->

(x rem 2)=:

= 0 end.

#fun

5> lists:filter(even,l)

.[2,4]

6> even(8)

.true

7> even(7)

.false

8> l.

[1,2,3,4]

9>

在這個例子當中,map的第乙個引數即為fun。3.

0 給主人留下些什麼吧!~~

Erlang 十 再探函式(fun)

匿名函式 functionname 不定義函式名的函式,被稱為匿名函式 fun 引數 end 定義乙個列表 list 1,2,3 lists map 處理函式,l 是個內建函式 作用 把列表l裡的各個元素 傳遞給 處理函式,返回的結果組成新的列表 lists map fun x x 2end,l 2...

fun和fun 的區別,函式也是物件

定義函式的3種方式 1 不常用 var fun new function console.log hello 這是我的第乙個函式 2 使用函式宣告 function 函式名 形參1,形參2.形參n 3 使用函式表示式 var 函式名 function 形參1,形參2.形參n 除5種基本型別以外的其他...

erlang中的spawn函式

spawn fun pid 引數型別 fun function 引數為空的函式 返回型別 程序pid 說明 生成乙個由fun函式啟動的 引數為空的新程序,並返回程序的pid。spawn node,fun pid 引數型別 node node 節點 fun function 引數為空的函式 返回型別 ...