一.普通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)行類(lèi)型推導(dǎo)時(shí)盖腕,最后一行表達(dá)式返回值類(lèi)型作為lambda的返回值類(lèi)型『斩現(xiàn)在一個(gè)函數(shù)必需的參數(shù)列表、函數(shù)體和返回類(lèi)型溃列。
函數(shù)類(lèi)型
函數(shù)類(lèi)型和lambda一樣劲厌,使用 -> 作分隔符,但函數(shù)類(lèi)型是將參數(shù)類(lèi)型列表和返回值類(lèi)型分開(kāi)听隐,所有函數(shù)類(lèi)型都有一個(gè)圓括號(hào)括起來(lái)的參數(shù)類(lèi)型列表和返回值類(lèi)型补鼻。
//無(wú)參、無(wú)返回值的函數(shù)類(lèi)型(Unit 返回類(lèi)型不可省略)
() -> Unit
//接收T類(lèi)型參數(shù)遵绰、無(wú)返回值的函數(shù)類(lèi)型
(T) -> Unit
//接收T類(lèi)型和A類(lèi)型參數(shù)辽幌、無(wú)返回值的函數(shù)類(lèi)型(多個(gè)參數(shù)同理)
(T,A) -> Unit
//接收T類(lèi)型參數(shù),并且返回R類(lèi)型值的函數(shù)類(lèi)型
(T) -> R
//接收T類(lèi)型和A類(lèi)型參數(shù)椿访、并且返回R類(lèi)型值的函數(shù)類(lèi)型(多個(gè)參數(shù) 同理)
(T,A) -> R
//復(fù)雜函數(shù)類(lèi)型
(T,(A,B) -> C) -> R
當(dāng)顯示聲明lambda的函數(shù)類(lèi)型時(shí)乌企,可以省去lambda參數(shù)列表中參數(shù)的類(lèi)型,并且最后一行表達(dá)式的返回值類(lèi)型必須與聲明的返回值類(lèi)型一致:
val min:(Int,Int) -> Int = { x,y ->
//只能返回Int類(lèi)型成玫,最后一句表達(dá)式的返回值必須為Int
//if表達(dá)式返回Int
if (x < y){
x
}else{
y
}
}