Kotlin:在lambda中命名参数

时间:2019-06-20 06:10:33

标签: kotlin lambda

请忽略实际的“功能”,而在这里更多地关注lambda的使用,因为我正在研究lambda,并让它们运行,以使人对Kotlin有所了解。

val listener : (String?)->String = {
            val s2 = it?.also {
            }
                ?: "Null"
            statusText.text=s2
            s2
        }

因此将lambda分配给“侦听器”就很好了。

有人可以告诉我为什么我无法为第一个(也是唯一的)参数分配名称。

  val listener : (s: String?)->String = {
            val s2 = s?.also {
            }
                ?: "Null"
            statusText.text=s2
            s2
        }

在“ val s2 = s?.also ...”行中,编译器抱怨“ s”是未解决的引用。如果是这样,为什么参数命名是合法的,例如:

val listener : (s: String?)->String = {

任何解释都会对我的理解有很大帮助。

1 个答案:

答案 0 :(得分:4)

应该是

val listener : (s: String?) -> String = { s ->
    val s2 = s?.also {
    } ?: "Null"
    statusText.text=s2
    s2
}

或简单地

val listener : (String?) -> String = { s ->
    val s2 = s?.also {
    } ?: "Null"
    statusText.text=s2
    s2
}

请注意,在mambda中使用return也是错误的。