先看乙個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 引數為空的函式 返回型別 ...