writeln wipes contents of variables ?

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 21 06:36:36 PST 2016


On 22/01/16 3:07 AM, W.J. wrote:
> On Thursday, 21 January 2016 at 13:15:46 UTC, Rikki Cattermole wrote:
>>
>> Ok so input ranges.
>> An input range is a little bit like an iterator (if you know what that
>> is).
>>
>> When an input range has been read fully, it is empty aka no longer has
>> any values associated with it.
>>
>> writeln, reads an input range fully (since you can't ask for what is
>> next without removing the current item) and outputs each entry.
>>
>> So yes, writeln will remove all entries from an input range.
>> Note however it will not do this for arrays since you can read
>> anywhere within them.
>
>
> Thanks for your reply.
>
> So writeln consumes the values in an InputRange. That leads me to
> believe that if I feed an InputRange to foreach, it will consume the
> values, too.
> Did I get that right ?

Correct.

> If that's the case, why I can iterate and write the values just fine
> using nested foreach loops *and* writeln them afterwards ?
> I would expect the foreach loops leaves "step3" in the same state as
> writeln does.
>
> So I'm still a little confused as to how foreach goes about it. I
> thought foreach would be iterating an InputRange the same way writeln does.
>
> By attaching ".array" to the result of I was under the impression the
> result was actually converted to an array.
> That seems not to be the case. What I probably got was something like an
> array of arrays of groups - which are apparently InputRanges ?
>
> So, yes, writeln... InputRange... makes perfect sense except for the
> foreach case.
>
> Thanks again for the help :)
>
>



More information about the Digitalmars-d-learn mailing list