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

测试代码:

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

输出:HTML BODY

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