DMD 0.161 release
Oskar Linde
oskar.lindeREM at OVEgmail.com
Thu Jun 29 09:24:16 PDT 2006
Walter Bright wrote:
> Jarrett Billingsley wrote:
>> "Walter Bright" <newshound at digitalmars.com> wrote in message
>> news:e7832r$g4h$1 at digitaldaemon.com...
>>> Mostly bug fixes.
>>>
>>> http://www.digitalmars.com/d/changelog.html
>>
>> Oh man, those delegate literals look like it would be very possible to
>> make interesting "pseudo-structures," that is, fake language
>> constructs. So if you were to define a function as
>>
>> void func(void delegate() dg);
>>
>> That is, the last parameter is a void delegate(), it would be an
>> interesting bit of syntactic sugar to be able to write
>>
>> func
>> {
>> writefln("foo");
>> }
>>
>> Not sure what utility this would present, but hey!
>
> There was some thought about doing that, but I'm not so sure it wouldn't
> be more confusing than useful.
With the new delegate syntax, and a very simple function one can finally
replace the annoying and common case where a for-loop until now still
has to be used:
void repeat(Int,Delegate)(Int n, Delegate d) {
static assert(is(Int:int),"Argument 1 to repeat must be int");
for (int i = 0; i < n; i++)
d();
}
The implementation could also contain:
static if (NumberOfArgs!(Delegate) == 1)
d(i);
The use is:
repeat(10, { something(); });
And the multi-line version becomes:
repeat(10, {
something();
somethingElse();
});
Which at least makes me wish for Jarretts suggested short form:
repeat(10) {
something();
somethingElse();
}
But the implications of having such power is almost scary... :)
/Oskar
More information about the Digitalmars-d-announce
mailing list