函数文本接收器
Kotlin提供使用一个特殊的接收对象来调用函数的功能。在函数文本主体内部,你可以调用接收器对象的方法而不需要使用任何的额外的限定符。这有点像扩展函数,一个函数文本接收器的最佳例子就是Type-safe Groovy-style builders。
这样的函数文本的类型就是函数类型接收器:
sum : Int.(other: Int) -> Int
这样的函数文本可以被调用就好像它是接收对象的一个方法一样。
1.sum(2)
匿名函数语法允许你指定函数接收类型。如果你想要申明一个函数类型变量并且在以后使用,这将会很有用。
val sum = fun Int.(other: Int): Int = this + other
如果接收器类型可以从上下文推断,那么lambda表达式可以被用作函数文本接收器。
class HTML {
fun body() { ... }
}
fun html(init: HTML.() -> Unit): HTML {
val html = HTML() // create the receiver object
html.init() // pass the receiver object to the lambda
return html
}
html { // lambda with receiver begins here
body() // calling a method on the receiver object
}