even more delegate sugar

Ivan Senji ivan.senji_REMOVE_ at _THIS__gmail.com
Tue Aug 22 01:41:06 PDT 2006


Don Clugston wrote:
> 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.

And if we could name arguments at call site then a function:

void If(bool c, void delegate (void) Then, void delegate (void) Else = 
null);

could be called like this:

If(cond)
Then = {
   writef(xxxx);
}
Else = {
   writef(xxxxx);
}


;)

Wouldn't that be cool? :P



More information about the Digitalmars-d mailing list