I just discovered that Scala has the necessary power to handle implemention of custom control structures without any ugliness. The secret ingredient is that Scala has call-by-name parameters. Here’s an example (note the
def unless[A](condition: Boolean, ifFalse: => A, ifTrue: => A) = if (condition) ifTrue else ifFalse
Demonstration: Scala won’t evaluate
ifTrue unless necessary, like here:
unless(true, throw new Error, "Hello!") => "Hello!"