21-函数显式声明
11.4.5 函数显式声明
Kotlin提供了使用指定的接收者对象调用函数显式声明的功能,也就是说,在带有显式声明的函数体中,可以调用该接收者对象上的对应方法而无须额外的限定符。这有点类似于扩展函数,即可以在函数体内访问接收者对象的成员。
函数的显式声明类型是一个带有接收者的函数类型,可以像调用普通方法那样来调用它。代码如下。
sum : Int.(other: Int) -> Int
1.sum(2)
匿名函数允许直接为函数显式声明指定的接收者类型,如果需要使用带有接收者的函数类型来声明一个变量并在之后使用它,则函数显式声明将变得非常有用。
val sum = fun Int.(other: Int): Int = this + other
如果接收者的函数类型可以从上下文推断得到,那么Lambda表达式可以作为带有接收者的函数显式声明来使用。
fun main(args: Array<String>) {
html { // 带有接收者的Lambda表达式由此开始
body() // 调用该接收者对象的一个方法
}
}
class HTML {
fun body() {
//...
}
}
fun html(init: HTML.() -> Unit): HTML {
val html = HTML() // 创建接收者对象
html.init() // 将该接收者对象传给该Lambda表达式
return html
}