Sto scrivendo un generatore di codice che produce l'uscita Scala.Come definire un operatore ternario in Scala che conserva i token principali?
Ho bisogno di emulare un operatore ternario in modo tale che i token che portano a "?" rimane intatto.
ad es. convertire l'espressione c ? p : q
in c something
. Il semplice if(c) p else q
non soddisfa i miei criteri, poiché richiede il if(
prima di c
.
Il mio primo tentativo (ancora utilizzando c/p/q come sopra) è
c match { case(true) => p; case _ => q }
un'altra opzione che ho trovato era:
class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) } implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)
che mi permette di scrivere:
c |: { b: Boolean => if(b) p else q }
Mi piace l'aspetto generale della seconda opzione, ma c'è un modo per renderlo meno dettagliato?
Grazie
ad es. qualcosa usando '_' al posto di b: Boolean sarebbe bello, ma non riuscivo a far funzionare nulla proprio –
Vedere 'BooleanW #?' da Scalaz: http://scalaz.googlecode.com/svn/continuous/latest /browse.sxr/scalaz/BooleanW.scala.html – retronym