for, foreach identifier allowed in c throws error in d

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jun 3 06:23:38 PDT 2014


On Mon, 02 Jun 2014 17:25:24 -0400, John Colvin  
<john.loughran.colvin at gmail.com> wrote:

> On Monday, 2 June 2014 at 20:23:12 UTC, Steven Schveighoffer wrote:
>> On Mon, 02 Jun 2014 15:58:01 -0400, Steven Schveighoffer  
>> <schveiguy at yahoo.com> wrote:
>>
>>
>>> I'm trying to think of a way to do this without loops, but not sure.
>>
>> I'm surprised, I looked for some kind of "apply" function like map, but  
>> just calls some function with each element in the range.
>>
>> Something like this would make this a 1 (2?) liner:
>>
>> if(i == t.length) writeln(t) else each!((x) => {t[i] = x;  
>> foo(i+1);})(iota(x.length));
>>
>> But I can't find a phobos primitive for each. Would have expected it in  
>> std.algorithm or std.functional?
>>
>> -Steve
>
> Its been discussed a few times. There were some objections (IIRC Walter  
> thought that there was no significant advantage over plain foreach).

Indeed, foreach is like such a construct:

... else each!((x) {t[i] = x; foo(i+1);})(iota(t.length));
... else foreach(x; 0 .. t.length) {t[i] = x; foo(i+1);}

It's even shorter and clearer.

I agree with Walter. Since such a construct by definition wouldn't return  
anything, you can't chain it. There really is little reason to have it.

-Steve


More information about the Digitalmars-d-learn mailing list