Estoy escribiendo un generador de código que produce salida Scala.¿Cómo se define un operador ternario en Scala que conserva los tokens principales?
Necesito emular un operador ternario de tal manera que los tokens que conducen a '?' permanece intacto.
p. Ej. convierta la expresión c ? p : q
en c something
. El simple if(c) p else q
falla mis criterios, ya que requiere poner if(
antes de c
.
Mi primer intento (todavía mediante c/p/q que el anterior) se
c match { case(true) => p; case _ => q }
otra opción que encontré fue:
class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) } implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)
la que me permite escribir:
c |: { b: Boolean => if(b) p else q }
Me gusta el aspecto general de la segunda opción, pero ¿hay alguna manera de hacerlo menos detallado?
Gracias
por ejemplo algo que use '_' en lugar de b: Boolean sería bueno, pero no pude hacer que nada funcione bien –
Ver 'BooleanW #?' de Scalaz: http://scalaz.googlecode.com/svn/continuous/latest /browse.sxr/scalaz/BooleanW.scala.html – retronym