Scala中的函數表達式

 

 

    最近看Spark的東西,因爲以前沒有接觸過lambda函數表達式,因此搜了點資料,特意紀錄在此java

 

Scala中的Lambda表達式

在函數式編程中,函數是基本的構造塊。Scala融合了java中的面向對象編程和函數式編程。在Scala中,一個lambda表達式是種叫作「函數」或者「函數文本」。Scala中的函數屬於一等公民。它們能夠被分配給vals或者vars(最終變量或者非最終變量),它們能夠做爲其餘函數的參數,也能夠組合成新的函數。
在Scala中一個函數文本寫成以下形式:
?
1
(argument) = > //funtion body

 

舉例來講,前面提到的java 用來計算兩個字符串長度差的 lambda 表達式,在Scala中寫做以下:
?
1
(s 1 : String, s 2 : String) = > s 1 .length - s 2 .length

 

Scala中的函數文本也是閉包。它能夠訪問在直接詞法做用域以外定義的變量。
?
1
2
3
4
val outer = 10
val myFuncLiteral = (y : Int) = > y * outer
val result = myFuncLiteral( 2 )
> 20

 

這個例子結果是20.
正如你所見,咱們將函數文本分配給了變量 myFuncLiteral。
java 8 的lambda表達式和Scala的函數文本在語法和語義上的類似性是十分明顯的。從語義上講它們是相同的,而語法上的惟一不一樣就是箭頭符號(java8 ->, scala =>)和咱們沒有提到的簡化符號。
 
引用:http://my.oschina.net/atttx123/blog/66425
相關文章
相關標籤/搜索