writeln wipes contents of variables ?

W.J. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jan 21 06:07:16 PST 2016


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 ?

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