Тернарная типизация оператора

Я реализовал тернарный оператор вроде Java <условие>? : , заменив / на : , поскольку : не является допустимым идентификатором:

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 делает? Я искал похожие решения и реализации, которые, как я обнаружил, демонстрировали одинаковое поведение.

9
задан Luigi a.k.a. Rhys 28 October 2011 в 21:55
поделиться