Using iteration / method chaining / etc on multi-dimensional arrays

Chris Katko ckatko at gmail.com
Thu Apr 12 21:22:53 UTC 2018


On Thursday, 12 April 2018 at 21:17:30 UTC, Paul Backus wrote:
> On Thursday, 12 April 2018 at 20:34:40 UTC, Chris Katko wrote:
>>
>> But each doesn't return anything, it mutates, right? I think 
>> that's the problem I ran into with my attempt. With your code, 
>> I get an error about void:
>>
>>   string []x = split(file.readln.idup, " ");
>>   x.each((ref s) => s.each((ref n) => n.stripRight()));
>
> You need to put an exclamation point after 'each' to pass the 
> function as a template parameter:
>
>     x.each!((ref s) => s.each!((ref n) => n.stripRight()));

DOH.

But now I'm here:

extra.d(2493): Error: template extra.map_t.load_map2.each!((ref 
s) => s.each!((ref n) => n.stripRight())).each cannot deduce 
function from argument types !()(string[]), candidates are:

/usr/include/dmd/phobos/std/algorithm/iteration.d(899):        
extra.map_t.load_map2.each!((ref s) => s.each!((ref n) => 
n.stripRight())).each(Range)(Range r) if 
(!isForeachIterable!Range && (isRangeIterable!Range || 
__traits(compiles, typeof(r.front).length)))

/usr/include/dmd/phobos/std/algorithm/iteration.d(934):        
extra.map_t.load_map2.each!((ref s) => s.each!((ref n) => 
n.stripRight())).each(Iterable)(auto ref Iterable r) if 
(isForeachIterable!Iterable || __traits(compiles, 
Parameters!(Parameters!(r.opApply))))


From:

string []x = split(file.readln.idup, " ");
import std.algorithm;
x.each!((ref s) => s.each!((ref n) => n.stripRight()));

Looks like it can't tell if it's a Range or... an auto ref 
Iterable?


More information about the Digitalmars-d-learn mailing list