折叠中三元运算符的问题

use*_*own 1 scala ternary-operator

考虑一个简单的集合,在一次迭代中搜索最小值和最大值:

val v = Vector (2, 1, 3, 5, 4)
val mima = (v(0), v(0))
val mami = (mima /: v) {case ((a, b), c) => if (c<a) (c, b) else if (c>b) (a, c) else (a, b)}
Run Code Online (Sandbox Code Playgroud)

到目前为止,如此简单。如果我用三元运算符 (X ? Y : Z) 替换 if/else,则不起作用;我收到一个错误:

    val mami = (mima /: v) {case ((a, b), c) => (c<a) ? (c, b) : (c>b) ? (a, c) : (a, b)}
<console>:1: ';' expected but : found. 
Run Code Online (Sandbox Code Playgroud)

在最后一个冒号。添加括号没有帮助:

    val mami = (mima /: v) {case ((a, b), c) => (c<a) ? (c, b) : ((c>b) ? (a, c) : (a, b))}
Run Code Online (Sandbox Code Playgroud)

我犯了一个愚蠢的错误还是嵌套的三元运算符有一个微妙的问题?

追查这个问题,它与折叠无关,仅:

if (c < 4) "small" else if (c > 8) "big" else "medium"
Run Code Online (Sandbox Code Playgroud)

作品

(c < 4) ? "small" : (c > 8) ? "big" : "medium" 
Run Code Online (Sandbox Code Playgroud)

以同样的方式失败。

Krz*_*sik 5

Scala 没有三元运算符,因为它具有ifwhich 作为表达式,因此您可以执行以下操作:

val result = if (c < 4) "small" else if (c > 8) "big" else "medium"
Run Code Online (Sandbox Code Playgroud)

您也可以折叠使用它:

val mami = (mima /: v) {case ((a, b), c) => if (c<a) (c, b) else if (c>b) (a, c) else (a, b)) }
Run Code Online (Sandbox Code Playgroud)