On 19.01.2012 18:21, torhu wrote:
On 19.01.2012 18:19, torhu 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?

Sorry, I meant this for the second example:

---
writeln(aa.byKey.front);
aa.byKey.popFront();
writeln(aa.byKey.front);
---

The reason would be that if it looks like field access, it should behave like that. People will quickly learn how this works, like they have gotten used to .dup and similar, but what happens when third-party libraries start doing it too? It think this is not a good precedence to set. We already have fields and functions, this would be a third kind, one that looks like a field but behaves more like a function.

Reply via email to