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