On 12/11/14 3:21 PM, Andrew Klaassen wrote:
On Thursday, 11 December 2014 at 20:17:50 UTC, bearophile wrote:
Andrew Klaassen:
The docs for stdio.lines say that it's a struct. stdio.lines works
with foreach.
If you want a range use "myfile".File.byLine or "myfile".File.byLineCopy.
Bye,
bearophile
I know that there are other ways that'll work. I was just curious about
what appears to be a surprise in the way that foreach interacts with
stdio.lines.
Look down a little bit further on that document, you will see the
section titled "Foreach over Structs and Classes with opApply"
Hm.. I note the incorrect statement "If the range properties don't
exist, then the foreach is defined by the opApply member function". This
is not exactly true, the foreach statement defaults to opApply first,
and will use range functions only if that doesn't exist.
FYI, the reason stdio.lines works that way is because in general, ranges
can only give you one value, but stdio.lines wants to give you the line
number too.
-Steve