8.2.13 带接收者的函数字面值

Kotlin 提供了使用指定的 接收者对象 调用函数字面值的功能。

使用匿名函数的语法,我们可以直接指定函数字面值的接收者类型。

下面我们使用带接收者的函数类型声明一个变量,并在之后使用它。代码示例:

1. >>> val sum = fun Int.(other: Int): Int = this + other
2. >>> 1.sum(1)
3. 2

当接收者类型可以从上下文推断时,lambda 表达式可以用作带接收者的函数字面值。

1. class HTML {
2. fun body() {
3. println("HTML BODY")
4. }
5. }

7. fun html(init: HTML.() -> Unit): HTML { // HTML.()中的HTML是接受者类型
8. val html = HTML()  // 创建接收者对象
9. html.init()        // 将该接收者对象传给该 lambda
10. return html
11. }

测试代码:

1. html {
2. body()
3. }

输出:HTML BODY

使用这个特性,我们可以构建一个HTML的DSL语言。