为什么不提供操作员?: 在 scala 中 [已关闭]

2022-09-03 08:20:05

Java中有一个运算符可用于根据布尔表达式选择值。例如,表达式将返回一个字符串 。我知道我们可以用表达来做到这一点,但我更喜欢这种风格,因为它简洁而优雅。? :3 > 2 ? "true" : false"true"if


答案 1

在Java中,和之间有一个区别,那就是它是一个语句,而它是一个表达式。在Scala中,它也是一个表达式:它返回一个值,例如,您可以将其分配给变量。if? :if? :if

Scala中的Java比Java中的Java更像:if? :if

// In Scala 'if' returns a value that can be assigned to a variable
val result = if (3 > 2) "yes" else "no"

你不能在Java中这样做:

// Illegal in Java, because 'if' is a statement, not an expression
String result = if (3 > 2) "yes" else "no"

因此,在 Scala 中确实没有必要,因为它将与 完全相同,但具有替代(更晦涩的)语法。? :if


答案 2

为了补充@Jesper所说的,如果你发现 - 太冗长,Scalaz提供了两个更简洁的替代方案:一个三元布尔运算符(,)一个类似C的语言和函数。ifelse?|fold

scala> import scalaz._
import scalaz._

scala> import Scalaz._
import Scalaz._

scala> (3 > 2) ? "True" | "False"
res59: java.lang.String = True

scala> (3 > 2).fold("True", "False")
res60: java.lang.String = True

推荐