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