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

Reply via email to