Michel Fortin wrote:
On 2009-07-25 06:10:09 -0400, Michiel Helvensteijn <[email protected]> said:It's a little better. But there's still ambiguity: interface I { int foo; int opSet_foo(int); } foo = 5; // which foo is used?In the other thread, I suggested this, which could aleviate the problem: int foo.opGet(); // getter void foo.opAssign(int); // setter with some support from the compiler. It could even be exteded to support more: int foo.opIndex(int); // foo[1]; void foo.opAddAssign(int); / foo += 1; void foo.invert(); // special function attached to propertyBasically, all you need to implement properties is not a dedicaced "property" syntax, it's a syntax to implement some kind of local namespace, and am "opGet" or "opValue" operator for representing the local namespace. It could also be expressed like this:namespace foo { int opGet(); // getter void opAssign(int); // setter ... int opIndex(int); // foo[1]; void opAddAssign(int); / foo += 1; void invert(); // special function attached to property } In both cases, the result would be the same: foo = 1; // same as foo.opAssign(1); return foo; // same as return foo.opGet();
If property is going to be extended like this, why not just make a nested struct. Works even now.
