Sergey Gromov wrote:
Sun, 18 Jan 2009 15:32:26 -0800, Andrei Alexandrescu wrote:

Sergey Gromov wrote:
Sun, 18 Jan 2009 07:21:55 -0800, Andrei Alexandrescu wrote:

http://www.digitalmars.com/d/2.0/statement.html#ForeachStatement

Scroll down to "Foreach over Structs and Classes with Ranges". The changelog reflects that too:
How do I implement a range that supports more than one pass?  From the
docs, all ranges seem to be essentially Input ranges currently.  That is

MyIterable collection;
foreach (element; collection) {} // OK, iterates
foreach (element; collection) {} // oops, it's empty!
Note that the range is being copied into a hidden variable, so after the first iteration the collection will still hold its ground.

Unless it's a class you mean?

Yah, ranges are meant to have value semantics. If you have a class container exposing ranges, define the range separately from the container itself:

MyIterable collection;
foreach (element; collection.all) {}
foreach (element; collection.all) {}


Andrei

Reply via email to