我正在关注此链接https://kotlin.link/articles/DSL-builder-in-Kotlin.html以了解Kotlin中的构建器实现。我不明白Builder类中的方法。方法name()
接收扩展函数作为参数,它不接收任何内容并返回String。呼叫者呼叫name { "ABC" }
。如果调用者将String传递给name
方法,它如何转换为返回String的Extension方法?
我尝试使用带接收器的函数文字的Kotlin文档,但所有样本都返回Unit
或引用DSL构建器。尝试谷歌搜索它也理解但没有运气抓住这个概念。
答案 0 :(得分:5)
对name { "ABC" }
的调用是两个Kotlin惯例的组合。
如果函数的最后一个参数是函数,则可以省略括号。此外,由于lambda没有参数,"ABC"
是它返回的参数。
所以调用者实际上是以name ({() -> "ABC"})
的形式传递一个lambda,而不是一个String。
查看链接中的示例,看起来name()
不需要接收器,这就是为什么它可能会产生误导。