On Thursday, 11 June 2015 at 08:24:25 UTC, Dmitry Olshansky wrote:
On 11-Jun-2015 11:18, w0rp wrote:
A thought just came to me. When I'm implementing foreach for a
container, I'm left with the choice of using a range for a container or opApply. I've found often that I prefer the ranges, as it's easy for me to write a range that satisfies @nogc @safe pure nothrow, etc. This is because the ranges don't call delegates which are less restrictive,
which opApply does.

I've been thinking about how you would implement opApply so that it could allow you to run @system code while the iteration itself is @safe, but then I had another idea. Could we allow foreach to look for a method (UFCS include) for producing a default range for an object, from a
function named 'range'?

In short this...

foreach(elem; container) {}

Could be transformed into this.

foreach(elem; container.range()) {}

Already works. Just define opSlice for container that returns a range and then:

foreach(elem; container) {}

is lowered to:

foreach(elem; container[]) {}

Ah! I did not know that. I shall use that in future.

Reply via email to