even more delegate sugar

Don Clugston dac at nospam.com.au
Tue Aug 22 00:00:59 PDT 2006


Tom S wrote:
> While we're at it, how about allowing the construct:
> methodName (arg, arg, ..., arg, { ... });
> 
> to be equivalent to:
> methodName (arg, arg, ..., arg) { ... }
> 
> 
> and
> methodName ({ ... });
> 
> to
> methodName {}
> 
> 
> Then e.g. the 'dotimes' example from 'Lazy Evaluation of Function 
> Arguments' would become:
> 
> void foo() {
>     int x = 0;
>     dotimes(10) {
>         writef(x++);
>     }
> }
> 
> 
> Which eliminates the need for lazy evaluation in this case, as it simply 
> uses a delegate. Moreover, it is more readable and concise at the same 
> time.

Sounds nice, but nowhere near enough visual cues.
If you leave off a semicolon, the meaning completely changes.
   dotimes(10); {
    writef(x++);
  }

   and

   dotimes(10)

   {
     writef(x++);
   }

would both be valid code.


But an amazing feature of your proposal is that you could write
a function
void If(bool b, void delegate (void) f);

and then write
   If( cond) { writef(xxxx); }

which would behave just like the built-in 'if' statement (albeit without 
an 'else' clause). Interesting.



More information about the Digitalmars-d mailing list