On Saturday, 28 July 2012 at 08:53:43 UTC, Dmitry Olshansky wrote:
On 28-Jul-12 11:49, Stuart wrote:
But as I understand it, for ranges I'd need to write a whole
new class.
struct. Yeah, you need it.
Here, I'm writing a SINGLE FUNCTION in standard imperative
style.
That implicitly constructs Iterator.
It's just a sugar. In fact you can do template mixin to
generate most of range boilerplate.
I think the basic thrust of my point is: Sugar is good. The
compiler converting an imperative function into a state-machine
class is helpful. Having to write it yourself every damn time is
a pain in the arse.
I've been reading about ranges at
[http://ddili.org/ders/d.en/ranges.html], and don't understand
something. Where it says:
struct StudentRange {
Student[] students;
this(School school) {
this.students = school.students;
}
[...code...]
Surely "students" is copied here? Isn't the whole point NOT to
copy the array? Perhaps it should say:
this.students = school.students[];
?