Saturday, April 24, 2010

How to define a ternary operator in Scala which preserves leading tokens?

Programmer Question

I'm writing a code generator which produces Scala output.



I need to emulate a ternary operator in such a way that the tokens leading up to '?' remain intact.



e.g. convert the expression c ? p : q to c something. The simple if(c) p else q fails my criteria, as it requires putting if( before c.



My first attempt (still using c/p/q as above) is




c match { case(true) => p; case _ => q }


another option I found was:




class ternary(val g: Boolean => Any) { def |: (b:Boolean) = g(b) }

implicit def autoTernary (g: Boolean => Any): ternary = new ternary(g)


which allows me to write:




c |: { b: Boolean => if(b) p else q }


I like the overall look of the second option, but is there a way to make it less verbose?



Thanks



Find the answer here

No comments:

Post a Comment

LinkWithin

Related Posts with Thumbnails