一.普通lambda
lambda定義:
lambda就是將一小段代碼封裝成匿名函數(shù),以參數(shù)值的方式傳遞到函數(shù)中,供函數(shù)使用。
val sum = { x:Int, y:Int ->
x + y
}
lambda表達(dá)式始終用花括號(hào)包圍,并用 -> 將參數(shù)列表和函數(shù)主體分離。當(dāng)lambda自行進(jìn)行類型推導(dǎo)時(shí),最后一行表達(dá)式返回值類型作為lambda的返回值類型。現(xiàn)在一個(gè)函數(shù)必需的參數(shù)列表、函數(shù)體和返回類型。
函數(shù)類型
函數(shù)類型和lambda一樣,使用 -> 作分隔符,但函數(shù)類型是將參數(shù)類型列表和返回值類型分開,所有函數(shù)類型都有一個(gè)圓括號(hào)括起來的參數(shù)類型列表和返回值類型。
//無參、無返回值的函數(shù)類型(Unit 返回類型不可省略)
() -> Unit
//接收T類型參數(shù)、無返回值的函數(shù)類型
(T) -> Unit
//接收T類型和A類型參數(shù)、無返回值的函數(shù)類型(多個(gè)參數(shù)同理)
(T,A) -> Unit
//接收T類型參數(shù),并且返回R類型值的函數(shù)類型
(T) -> R
//接收T類型和A類型參數(shù)、并且返回R類型值的函數(shù)類型(多個(gè)參數(shù) 同理)
(T,A) -> R
//復(fù)雜函數(shù)類型
(T,(A,B) -> C) -> R
當(dāng)顯示聲明lambda的函數(shù)類型時(shí),可以省去lambda參數(shù)列表中參數(shù)的類型,并且最后一行表達(dá)式的返回值類型必須與聲明的返回值類型一致:
val min:(Int,Int) -> Int = { x,y ->
//只能返回Int類型,最后一句表達(dá)式的返回值必須為Int
//if表達(dá)式返回Int
if (x < y){
x
}else{
y
}
}