Ich schreibe einen Code-Generator, der Scala-Ausgabe produziert.Wie definiert man einen ternären Operator in Scala, der führende Tokens erhält?
Ich muss einen ternären Operator so emulieren, dass die Token zu '?' intakt bleiben.
z.B. Konvertieren Sie den Ausdruck c ? p : q
in c something
. Das einfache if(c) p else q
erfüllt meine Kriterien nicht, da es erforderlich ist if(
vor c
zu setzen.
Mein erster Versuch (noch mit c/p/q wie oben) wird
c match { case(true) => p; case _ => q }
eine weitere Option, ich fand, war:
class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) } implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)
, die mir schreiben können:
c |: { b: Boolean => if(b) p else q }
Ich mag das allgemeine Aussehen der zweiten Option, aber gibt es eine Möglichkeit, es weniger wortreich zu machen?
Dank
z etwas mit '_' anstelle von b: Boolean wäre nett, aber ich konnte nichts richtig arbeiten –
Siehe 'BooleanW #?' aus Scalaz: http://scalaz.googlecode.com/svn/continuous/latest /browse.sxr/scalaz/BooleanW.scala.html – retronym