Kotlin - lambda 函数中使用三元运算符出现意外标记(使用“;”分隔同一行上的表达式)

isr*_*eda 0 kotlin

Unexpected tokens当我尝试运行此代码时,我在 lambda 函数上遇到错误:

fun main() {
    val oddOrEven = { number: Int -> (number % 2 == 0) ? "Even" : "Odd" }
    print(oddOrEven(2))
}
Run Code Online (Sandbox Code Playgroud)

mik*_*keb 5

Kotlin 中没有三元运算符。请参阅此处的讨论。

if在 Kotlin 中是一个表达式(因此它可以返回一个值),你可以这样做:

fun main() {
  val oddOrEven = { number: Int -> if(number % 2 == 0) "Even" else "Odd" }
  println(oddOrEven(2))
}
Run Code Online (Sandbox Code Playgroud)

有一个特殊的运算符:

val x = if (y == null) -1 else x
Run Code Online (Sandbox Code Playgroud)

上式可以简化为:

val x ?: -1
Run Code Online (Sandbox Code Playgroud)

这称为 Elvis 运算符 - 如果值为 则null返回另一个值(在本例中为 -1)

  • (实际上,`if…else` 是 Kotlin 中的一个三元运算符——它的工作原理与 Java 的完全相同,只是拼写不同。) (2认同)