Kotlin Lambda语法说明

时间:2018-11-23 06:19:17

标签: lambda kotlin

我是Kotlin的初学者,很想知道println的lambda表达式的行为。不幸的是,两个函数都在做相同的工作。

    val printFunction1:(String) -> Unit = {
        println("Hello, $it!")
    }

    val printFunction2 = {
        user: String ->
        println("Hello, $user!")
    }

我可以这样调用函数,如果有人可以解释这一点将是很好的。

 printFunction1("Bini")
 printFunction2("Jenu")

2 个答案:

答案 0 :(得分:1)

在两种情况下,Lambda的行为都与普通函数完全一样。 接受输入(参数)作为字符串,并且函数执行println() 正常功能:

fun funName(parameters):ReturnType{FunBody}

Lambda函数绑定到变量:

var varFunName:(ParameterType) ->Unit={FunBody}
               or
var varFunName = {
    parameters -> {FunBody}
}

注意:由于第一种类型中没有参数名称,因此它将自动映射到其变量/表达式 要了解更多信息,请查看页面grammar for functionLiterals,该页面的语法确实适用于所有Kotlin语言构造,可能需要花费一些时间才能理解所有语法,因此如果您想了解该部分,只需点击链接

答案 1 :(得分:1)

您希望这些功能表现如何?

第一个有一个明确的function type (String) -> Unit。这样,您无需在lambda中指定参数类型String。您可以只将it(对于lambda的单个参数使用implicit name)作为String

第二个没有指定类型,您需要告诉编译器您的lambda参数具有什么类型,这是您使用user: String ->完成的。请注意,将这部分移到带有左括号的行是更惯用的:

val printFunction2 = { user: String ->
    println("Hello, $user!")
}

否则,我在这里看不到任何幻想。让我知道是否需要进一步说明。