我是Kotlin初学者,渴望了解println的lambda表达式的行为。不幸的是,两个函数都在做同样的工作。
val printFunction1:(String) -> Unit = {
println("Hello, $it!")
}
val printFunction2 = {
user: String ->
println("Hello, $user!")
}
我可以调用这样的函数,如果有人可以解释这个就好了。
printFunction1("Bini")
printFunction2("Jenu")
您期望这些功能表现如何?
第一个有明确的function type (String) -> Unit
。这样,您就不需要在lambda中指定参数类型String
。你可以使用it
(implicit name作为lambdas的单个参数)作为String
。
第二个没有指定类型,你需要告诉编译器你的lambda参数有什么类型,你用user: String ->
做了。请注意,将此部件移动到带有左括号的行更为惯用:
val printFunction2 = { user: String ->
println("Hello, $user!")
}
否则我在这里看不到任何花哨的东西。如果您需要进一步澄清,请与我们联系。
在两种情况下,Lambdas的行为与正常函数完全相同。接受输入(参数)作为字符串,函数执行println()正常函数:
fun funName(parameters):ReturnType{FunBody}
Lambda函数绑定到变量:
var varFunName:(ParameterType) ->Unit={FunBody}
or
var varFunName = {
parameters -> {FunBody}
}
注意:由于第一种类型中没有参数名称,它会自动映射到它变量/表达式以便更加了解。请查看grammar for functionLiterals页面确实具有所有Kotlin语言结构的语法可能需要一些时间才能理解所有语法链接所以如果你想了解那部分只是按照链接