On Mon, 03 Aug 2009 11:03:54 -0400, Andrei Alexandrescu <seewebsiteforem...@erdani.org> wrote:

Steven Schveighoffer wrote:
On Mon, 03 Aug 2009 10:25:02 -0400, Michiel Helvensteijn <m.helvensteijn.rem...@gmail.com> wrote:

Steven Schveighoffer wrote:

So the poster who started this trail of the thread is assuming that

t.property.get()

identifies the property getter directly. But what if the return type of t.property.get() contains a method get()? Since t.property is an alis for
t.property.get(), Should t.property.get() map to:

...

That is the ambiguity.

I myself see great value in the ability to access the getter and setter
functions directly. But because of the ambiguity you described, this is
problematic for D.

Andrei sees 'get' and 'set' as nothing more than declaration-side
indications of the getter and setter. Not real functions. In that case, the
ambiguity doesn't exist.

To alleviate possible confusion, it has been suggested that a space be used, not a dot, between the name of the property and get/set in the declaration.

So your answer is, there is no ambiguity because it's not possible to access the getter/setter directly? That poses a problem for existing code which uses delegates to such functions. I'm not sure we want to lose that ability.
 -Steve


Now that I think of it, even if properties don't readily return delegates, they are trivially easy to obtain:

class A
{
     ... define property foo with whatever syntax ...
}

unittest
{
     auto a = new A;
     auto getter = () { return a.foo; }
     auto setter = (int x) { a.foo = x; }
     setter(5);
     writeln(getter());
}

I actually compiled and ran that with foo defined as a regular field.

Yes, that works. Now make it so I don't have to go through 2 function calls :)

But the few times that you need a delegate to a getter/setter probably makes this kludge a valid solution. It might even be possible to make a template, like:

PropertyDelegate!(T...) delegateOf(a.foo)

One thing I dislike about D sometimes is how it forces me to go through extra layers to make the syntax valid, when a direct route is clearly possible. Yes, I know it doesn't add too much bloat/overhead, but it is supposed to be a systems language after all...

-Steve

Reply via email to