What is Function literals with receiver?
Function Type
()→Unit
无参数,不回传结果
(Int)->Int
有一个参数 Int, 会回传 Int
()->()->Int
无参数,回传另一个 function
Function Literal: 用来定义 function 的语法
用 Anonymous Function 方式定义 function, =
右边的就是 function literal
var printHW: ()->Unit = fun() {
println("Hello World")
}
var convertInt: (Int)->String = fun(i: Int): String {
return "Int is $i"
}
用 Lambda Expression 方式定义 function, {}
内的就是 funcion literal
val printHW: ()->Unit = { println("Hello World") }
val convertInt: (Int)->String = { it -> "Int is $it" }
Extension Function
所有 Int 都有一个 function 叫 sumDouble, 而 sumDouble 参数为 Double, 会回传 Int
fun Int.sumDouble(d: Double): Int = this.plus(d.toInt())
2.sumDouble(3.1) // 5
如果我们需要将 sumDouble 变成 variable, 定义 Int 为 receiver, 表示 Int 有一个 function, 参数 Double, 回传 Int, :
右边就是 function type with receiver
var sumDouble: Int.(Double) -> Int
=
右边的就是 function literal with receiver
var sumDouble: Int.(Double) -> Int = { it: Double -> this.plus(it.toInt()) }
重点: this 在 lambda 的 scope 里代表 receiver 本身,