【问题标题】:Explanation on Function literal with receiver in KotlinKotlin 中带接收器的函数字面量说明
【发布时间】:2017-05-31 08:39:31
【问题描述】:

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

我尝试按照 Kotlin 文档了解带有接收器的函数文字,但所有样本都有返回 Unit 或引用 DSL Builders 的样本。尝试用谷歌搜索它以理解但没有把握这个概念。

【问题讨论】:

    标签: kotlin builder


    【解决方案1】:

    name { "ABC" } 的调用是两个 Kotlin 约定的组合。

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

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

    查看链接中的示例,name() 似乎不需要接收器,这就是它可能具有误导性的原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-30
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多