problem with byLine
Ali Çehreli
acehreli at yahoo.com
Tue May 15 11:24:23 PDT 2012
On 05/15/2012 09:03 AM, Matt Soucy wrote:
>>> I believe byLine reuses the internal buffer. Try duping the lines:
>>> auto i = f.byLine().map!"a.idup"().array();
>> Can someone please explain to me the last line?
>>
>> I'm trying to learn D, by playing with code and reading this forum. I'm
>> a slow learner. :)
>>
>> Anyways, I looked at std.stdio code and noticed that byLine resturns a
>> struct ByLine, but where does the .map come from? Thanks!
>>
>
> It comes from std.algorithm. What that line does is:
> f.byLine() // Get by lines, exactly as you know already
Just to clarify: what byLine() returns is a lazy range. Nothing is read
from the file just by that line.
> .map!"a.idup"() // Iterate over the byLine, and make a Range of
> immutable strings with the same contents as each line.
And even map() is lazy: It returns a lazy range that will apply .idup()
to the lines that it takes from ByLine.
> .array() // Convert it from a range to an array of strings
And that's the eager one that consumes the lazy range that map() returns.
Ali
--
D Programming Language Tutorial: http://ddili.org/ders/d.en/index.html
More information about the Digitalmars-d-learn
mailing list