首页 > 解决方案 > Kotlin:在 lambda 中命名参数

问题描述

请忽略实际的“功能”,并在这里更多地关注 lambda 的使用,因为我正在使用 lambdas,让,也,运行等来感受 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 = {

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

标签: kotlinlambda

解决方案


它应该是

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
}

请注意,return在 mambda 中使用也是不正确的。


推荐阅读