Kotlin中带接收器的函数文字解释

时间:2017-05-30 23:05:16

标签: kotlin builder

我正在关注此链接https://kotlin.link/articles/DSL-builder-in-Kotlin.html以了解Kotlin中的构建器实现。我不明白Builder类中的方法。方法name()接收扩展函数作为参数,它不接收任何内容并返回String。呼叫者呼叫name { "ABC" }。如果调用者将String传递给name方法,它如何转换为返回String的Extension方法?

我尝试使用带接收器的函数文字的Kotlin文档,但所有样本都返回Unit或引用DSL构建器。尝试谷歌搜索它也理解但没有运气抓住这个概念。

1 个答案:

答案 0 :(得分:5)

name { "ABC" }的调用是两个Kotlin惯例的组合。

如果函数的最后一个参数是函数,则可以省略括号。此外,由于lambda没有参数,"ABC"是它返回的参数。

所以调用者实际上是以name ({() -> "ABC"})的形式传递一个lambda,而不是一个String。

查看链接中的示例,看起来name()不需要接收器,这就是为什么它可能会产生误导。