On Thu, 21 Apr 2011 18:57:18 -0400, Michel Fortin <[email protected]> wrote:

Le 2011-04-21 à 17:54, Robert Jacques a écrit :

First, remember that basic assignments can be chained: x = y = 1; So a property should never return void, whether it's a setter or a getter logically.

Indeed. You'd expect the property to return the value you set to it.


Second, there are situations where you want to be able to support:

a.prop1 =  5;

and

auto b = a.prop1(5).prop2(6);

But here you have a dilemma. To work like "x = y = 1" above, "a.prop1 = 5" should return "5". But to work with chaining, "a.prop1(5)" should return "a". How do you make that work?

Assignment chaining and method chaining are not compatible, as far as I know. I was using "x = y = 1" as a counter-argument; i.e. as an illustration that fields/property assignment could/should have a return value. In the later example, something like `c = a.prop1 = 5` would only work if is(typeof(c) == typeof(a)). So, a.prop1 isn't 100% faithful to the field semantics which generally define what a strict 'property' should be. But on the other hand, the API design of 'a' desires that prop1 be accessible via both method and field style invocation, something that's possible today using Methods-as-Fields but not with @property alone.
_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to