On Thu, 19 Jan 2012 12:19:09 -0500, torhu <[email protected]> wrote:
On 17.01.2012 07:48, Andrei Alexandrescu wrote:
I hate I must ask this:
int[string] aa;
foreach (k; aa.byKey) { ... }
or
int[string] aa;
foreach (k; aa.byKey()) { ... }
For it to be a property, I think you should be able to simplify this
example:
---
auto k = aa.byKey;
writeln(k.front);
k.popFront();
writeln(k.front);
---
to this:
---
writeln(k.byKey.front);
k.byKey.popFront();
writeln(k.byKey.front);
---
and get the same result. But my understanding is that you wouldn't, in
which case byKey doesn't sense to me as a property. It creates and
returns a new range object each time you call it, right?
That's like saying this:
int[] arr;
int l = arr.length;
l++;
should be the same as this:
arr.length++;
because it's a property.
This is an orthogonal problem. byKey doesn't try to affect the original
AA, so the semantics should be the same whether you save a copy or access
it in one line.
There are no hard-fast rules on what should be properties and what
shouldn't. But the rvalue vs lvalue is an orthogonal problem.
-Steve