Mon, 15 Feb 2010 01:08:38 -0500, Nick Sabalausky wrote: > "BCS" <n...@anon.com> wrote in message > news:a6268ff103d38cc7ba48d6fa...@news.digitalmars.com... >> Hello Nick, >> >>> I *definitely* want that for string mixins of both the >>> template-generated and ctfe-generated varieties. >>> >>> >> Why? I don't see any reason aside from documentation to do it. >> >> > Well, for one thing, not having it forces any code using my > custom-assert library to look like this crap... > > mixin(deferAssert!(`foo == 3 || foo > 5`, "foo is bad")); > > ...which understandably no one wants to touch and I *absolutely* don't > blame them one bit. Compare that to this... > > deferAssert!(`foo == 3 || foo > 5`, "foo is bad"); > > ...ahhh, now I can actually see what the hell's going on!
To me it's not clear why you just can't do this with higher order functions. For instance in Scala I would just write: object MyUnitTestFramework { def deferAssert(pred: => Boolean, msg: String) { if (pred) println(msg) } } or whatever functionality you might want. Passing the predicate by name does not force evaluation yet on the call site.