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 本身,