stdio.lines doesn't have popFront, but works with foreach
Kapps via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Thu Dec 11 12:37:07 PST 2014
On Thursday, 11 December 2014 at 20:11:21 UTC, Andrew Klaassen
wrote:
> The docs for stdio.lines say that it's a struct. stdio.lines
> works with foreach.
>
> The docs for foreach say:
>
> "Iteration over struct and class objects can be done with
> ranges. For foreach, this means the following properties and
> methods must be defined: .empty ... .front ... .popFront()"
>
> But when I try to access any of those properties or methods for
> stdio.lines, I get compilation errors:
>
> 1 import io = std.stdio;
> 2
> 3 void main(string[] args) {
> 4
> 5 auto infile = io.File(args[1], "r");
> 6
> 7 auto filelines = io.lines(infile);
> 8
> 9 io.writeln(filelines.front);
> 10 io.writeln(filelines.empty);
> 11 io.writeln(filelines.popFront());
> 12 }
>
> test_filechunking.d(9): Error: no property 'front' for type
> 'lines'
> test_filechunking.d(10): Error: no property 'empty' for type
> 'lines'
> test_filechunking.d(11): Error: no property 'popFront' for type
> 'lines'
>
> Why is this?
>
> I'm using ldc2 for compilation, FWIW.
>
> Andrew
Ranges are one way of allowing foreach. The other is through the
use of opApply, which is what std.stdio.lines does.
http://dlang.org/statement.html#ForeachStatement
More information about the Digitalmars-d-learn
mailing list