(Int, Int) -> Unit
() -> Unit
如果沒有要返回任何 value 可以填 Unit 但不可省略不填
(Int, Int) -> Int
1- Object 這樣表示{ println("Hello!")} ,只剩下 body (執行程式碼的部分) ,其他省略。
2- greeting() greeting 變數 變成可以跟 function 一樣調用,也可以寫成
greeting.invoke()
fun main(args: Array<String>) {
val greeting:() -> Unit = { println("Hello!")}
// invoking function
greeting()
// 也可以寫成下面這樣
greeting.invoke()
}
the output will be:
Hello!
1- Object 這樣表示 { it -> println(it)}
2- greeting("Hello!") 傳入 String , greeting 變數 變成可以跟 function 一樣調用 ,也可以寫成
greeting.invoke("Hello!")
fun main(args: Array<String>) {
val greeting:(String) -> Unit = { it -> println(it)}
// invoking function
greeting("Hello!")
// 也可以寫成下面這樣
greeting.invoke("Hello!")
}
the output will be:
Hello!
fun main(args: Array<String>) {
val product:(Int,Int) -> Int = { a: Int, b: Int -> a * b }
val result = product(9, 3)
println(result) }
the output will be:
27
將 Lambdas Object 當作參數 傳給 function (passMeFunction)變數 abc
再將 abc 變數像 function 一樣 調用 , 做法是 變數 加上 () 或 .invoke()
// abc 是變數名
// "() -> Unit" is a type , 參看上面
fun passMeFunction (abc:() -> Unit){
abc()
// 或者是
abc.invoke()
}
將 lambda 表達式 的 Object "{println("Hello !")}" , 傳給 passMeFunction function
fun main(){
// 如果不懂 請 參考上面 Lambdas 表達式
// {println("Hello !")} 是要傳給 passMeFunction abc 變數的 物件
passMeFunction({println("Hello !")})
}
the output will be:
Hello !
我們可以將 passMeFunction 調用的寫法
passMeFunction({println("Hello !")})
簡化成下面這樣
passMeFunction{println("Hello !")}
我們可以將 Object 參數部分 ( -> 前面部分 ) 以 it 或其他名稱代替
我們可以將下面這個 person 名稱
val selectedPerson = people.maxBy({ person -> person.age })
替換成 it
val selectedPerson = people.maxBy({ it -> it.age })
fun returnMeAddFunction(): ((Int, Int) -> Int) {
// 將 lambda 表達式 做返回
return {a: Int, b: Int -> a + b}
}
fun main(){
val add = returnMeAddFunction()
val result = add(2, 2)
println(result)
}
// 與上面 {a: Int, b: Int -> a + b} 有相同功能
fun add(a: Int, b: Int): Int {
return a + b
}
fun returnMeAddFunction(): ((Int, Int) -> Int) {
// 使用:: 加上 function 名稱 add , 代替 {a: Int, b: Int -> a + b}
return ::add
}
fun main(){
val add = returnMeAddFunction()
val result = add(2, 2)
println(result)
}