scala混合了物件導向和函式式的特性,我們通常將可以作為引數傳遞到方法中的表示式叫做函式。在函式式程式語言中,函式是「頭等公民」,高階函式包含:作為值的函式、匿名函式、閉包、柯里化等等。
可以像任何其他資料型別一樣被傳遞和操作的函式。
定義函式時格式:val 變數名 = (輸入引數型別和個數) => 函式實現和返回值型別
「=>」左面表示輸入引數名稱、型別和個數,右邊表示函式的實現和返回值型別
object test
}
在scala中,不需要給每乙個函式命名。我們把沒有將函式賦給變數的函式叫做匿名函式。
val arr=array(1,2,3,4,5)
//直接將匿名函式傳入到map方法中,效果和前面一樣
val arr2=arr.map((x:int)=>x+5)
println(arr2.tostring)
由於scala可以自動推斷出引數的型別,所以可以簡寫:
val arr2=arr.map(x=>x+5)
下劃線模式:
val arr2=arr.map(_+5)
柯里化(currying)指的是把原來接受多個引數的函式變換成接受乙個引數的函式過程,並且返回接受餘下的引數且返回結果為乙個新函式的技術。
柯里化(currying)函式是乙個帶有多個引數,並引入到乙個函式鏈中的函式,每個函式都使用乙個引數。
scala柯里化風格的使用可以簡化主函式的複雜度,提高主函式的自閉性,提高功能上的可擴張性、靈活性。可以編寫出更加抽象,功能化和高效的函式式**。
閉包是乙個函式,返回值依賴於 宣告在函式外部的乙個或多個變數。
閉包通常來講可以簡單的認為是可以訪問不在當前作用域範圍內的乙個函式。
val y=10
//變數y不處於其有效作用域時,函式還能夠對變數進行訪問
val add=(x:int)=>
//在add中有兩個變數:x和y。其中的乙個x是函式的形式引數,
//在add方法被呼叫時,x被賦予乙個新的值。
// 然而,y不是形式引數,而是自由變數
println(add(5)) // 結果15
Scala高階函式
在scala中,無法直接操縱方法,只能直接操縱函式,所以需要使用 import scala math.val temp ceil val num 3.14 println fun temp num temp的型別是 double double,意為接受double引數並返回double的函式。能夠對...
Scala 高階函式
import scala.math.val num 3.14val func ceil 意味著確實指的是這個函式,而不是忘記了傳引數 func是乙個函式變數,內容儲存的是個函式 val v func num println v val arr array 1.0,3.14,4 map func 將函...
Scala高階函式
高階函式 higher order function 高階函式可以使用其他函式作為引數,進入方法內使用,或者使用函式輸出結果作為引數。object demo 函式1,返回當前時間納秒數,long型別 def time t long 可以簡寫為t long,long表示如果傳入引數為方法時返回值為lo...