考虑一个简单的Collection,一次迭代搜索最小值和最大值:
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)}
到目前为止,很简单。如果我用三元运算符(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.
在最后一个冒号。添加括号没有帮助:
val mami = (mima /: v) {case ((a, b), c) => (c<a) ? (c, b) : ((c>b) ? (a, c) : (a, b))}
我犯了一个愚蠢的错误,还是嵌套三元运算符有一个微妙的问题?
解决此问题,仅与折叠无关:
if (c < 4) "small" else if (c > 8) "big" else "medium"
作品
(c < 4) ? "small" : (c > 8) ? "big" : "medium"
失败的方法相同。
Scala没有三元运算符,因为它具有if
作为表达式,因此您可以执行以下操作:
val result = if (c < 4) "small" else if (c > 8) "big" else "medium"
您也可以折叠使用:
val mami = (mima /: v) {case ((a, b), c) => if (c<a) (c, b) else if (c>b) (a, c) else (a, b)) }
[哈哈,抱歉,伙计们!
简单的解决方案是:Scala中没有Elvis运算符。 :)哎呀,我怎么能忘记呢?
(a < 4) ? foo : bar
不是比]短很多>
if (a < 4) foo; else bar
并且与Java相反,Scala从if / else语句返回一个值,因此您不需要它。