我是Kotlin的初学者,很想知道println的lambda表达式的行为。不幸的是,两个函数都在做相同的工作。
val printFunction1:(String) -> Unit = {
println("Hello, $it!")
}
val printFunction2 = {
user: String ->
println("Hello, $user!")
}
我可以这样调用函数,如果有人可以解释这一点将是很好的。
printFunction1("Bini")
printFunction2("Jenu")
答案 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!")
}
否则,我在这里看不到任何幻想。让我知道是否需要进一步说明。