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" } }