Preferred behavior of take() with ranges (value vs reference range)

Jon D via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Nov 8 21:10:18 PST 2015


On Monday, 9 November 2015 at 02:44:48 UTC, TheFlyingFiddle wrote:
> On Monday, 9 November 2015 at 02:14:58 UTC, Jon D wrote:
>> Here's an example of the behavior differences below. It uses 
>> refRange, but same behavior occurs if the range is created as 
>> a class rather than a struct.
>> --Jon
>
> This is an artifact of struct based ranges being value types. 
> When you use take the range get's copied into another structure 
> that is also a range but limits the number of elements you take 
> from that range.
>
> ...
>
> If you want a more indepth explanation there were two talks at 
> Dconf this year that (in part) discussed this topic. 
> (https://www.youtube.com/watch?v=A8Btr8TPJ8c, 
> https://www.youtube.com/watch?v=QdMdH7WX2ew&list=PLEDeq48KhndP-mlE-0Bfb_qPIMA4RrrKo&index=14)

Thanks for the quick reply. The two videos were very helpful. I 
understood what was happening underneath (mostly), but the videos 
made it clear there are a number of open questions regarding 
reference and value ranges and how best to use them.


More information about the Digitalmars-d-learn mailing list