【发布时间】:2011-12-17 15:08:34
【问题描述】:
我实现了一个像 Java 的 <condition> ? <if true> : <if false> 这样的三元运算符,用 / 代替 :,因为 : 不是一个有效的标识符:
case class Ternary[T](val o: Option[T]) {
def / (f: => T) = o getOrElse f
}
implicit def boolToTernary(cond: Boolean) = new {
def ? [T](f: => T) = if(cond) Ternary(Some(f))
else Ternary[T](None)
}
一般来说效果很好,例如
scala> (1 > 2) ? "hi" / "abc"
res9: java.lang.String = abc
但在以下情况下会摔倒:
scala> (1 > 2) ? 5 / 6.0
<console>:33: error: type mismatch;
found : Double(6.0)
required: Int
(1 > 2) ? 5 / 6.0
^
我可以对类型进行任何调整,以使其像内置的if (1 > 2) 5 else 6.0 那样工作吗?我搜索了类似的解决方案,发现所有实现都表现出相同的行为。
【问题讨论】:
标签: scala types ternary-operator