On Mon, Aug 21, 2006 at 12:06:36AM +0100, Andrew Suffield wrote: > On Sun, Aug 20, 2006 at 03:55:56PM -0600, Luke Palmer wrote: > > > Why would you care about introducing a new lexical scope? You would > > care about that if you used a variable you declared in the commented > > code in the code below it, which is broken. > > Typically because you have several versions that you want to switch > between, and you'd rather add a few characters of comment rather than > spend the time rearranging the code to use ifs or subs or > something. It's something you might do when debugging or experimenting > (especially under time pressure) - at least, that's how I use '#if 0' > in C.
The more I think about this issue the more I realize that this is really
a very simple case of metaprogramming. Which got me thinking about more
sophisticated compile time flow control. I imagine that defining
something like a compile time switch switch statement is possible with
the existing macros. Would anyone like to take a shot at defining a
macro to do this? Is it possible to jump to something outside of a
macros input that is also evaluated at compile time?
> Using <<'#END' (or rather, q:to'#END') is actually not that bad an
> idea... it'd work in most places where #{} would give trouble. Unless
> anybody has any better ideas, that could be a useful idiom to
> remember.
Using heredocs for commenting code out is slightly undesirable as it
would create a branch that has to be tested at runtime. One would hope
that the compiler would note the conditional on a constant and throw the
heredoc out as dead code but it certainly feels untidy.
-J
--
pgpCLflaAtQID.pgp
Description: PGP signature
