Ranges, constantly frustrating
Jesse Phillips
Jesse.K.Phillips+D at gmail.com
Tue Feb 11 11:48:40 PST 2014
On Tuesday, 11 February 2014 at 10:10:27 UTC, Regan Heath wrote:
> Things like this should "just work"..
>
> File input ...
>
> auto range = input.byLine();
> while(!range.empty)
> {
> range.popFront();
> foreach (i, line; range.take(4)) //Error: cannot infer
> argument types
> {
> ..etc..
> }
> range.popFront();
> }
>
> Tried adding 'int' and 'char[]' or 'auto' .. no dice.
>
> Can someone explain why this fails, and if this is a permanent
> or temporary limitation of D/MD.
>
> R
In case the other replies weren't clear enough. A range does not
have an index.
What do you expect 'i' to be? Is it the line number? Is it the
index within the line where 'take' begins? Where 'take' stops?
There is a feature of foreach and tuple() which results in the
tuple getting expanded automatically.
byLine has its own issues with reuse of the buffer, it isn't
inherent to ranges. I haven't really used it (needed it from
std.process), when I wanted to read a large file I went with
wrapping std.mmap:
https://github.com/JesseKPhillips/libosm/blob/master/source/util/filerange.d
More information about the Digitalmars-d-learn
mailing list