Kotlin:对Lambda的声明
我怎样才能做一个Kotlin声明到lambda?
我知道你可以这样做:
fun foo() : () -> Unit { return { println("Hello World") } } //more beautiful: fun foo() : () -> Unit = { println("Hello World") }
是否也可以创建一个匿名lambda没有大括号{...}
?
特别是在switch语句中,花括号的常用方式看起来不太好。
fun bar(i: Int) : () -> Unit { return when (i) { 0 -> { { println("Hello") } } 1 -> { { println("World") } } else -> { { println("Bye") } } } }
期待你的回复!
花括号是一个lambda表达式的语法 ,你不能没有它们创建一个。
在一个when
语句中,你可以给你的分支一个块体,并返回lambda作为它的最后一个表达式,或者你可以有一个表达式分支返回一个lambda通过包装在圆括号(否则它将被解释为一个分支执行大括号内的代码):
when (x) { "block body returning an Int" -> { // do stuff 25 } "block body returning a lambda" -> { // do stuff { println("Hello") } } "single expression returning an Int" -> 25 "single expression returning a lambda" -> ({ println("Hello") }) }
如果你既不喜欢{{
也不({
从zsmb13的答案中,你可以通过定义一个相当平凡的函数使它看起来稍微好一点:
fun <A> lambda(x: A) = x // usage return when (i) { 0 -> lambda { println("Hello") } 1 -> lambda { println("World") } else -> lambda { println("Bye") } }
这没有花括号,看起来更好。
fun getDayType(day: String): String { return when (day) { "SATURDAY" -> "Half Day" "SUNDAY" -> "Holyday" else -> "running day" } }