fun with properties
Kai Meyer
kai at unixlords.com
Wed Mar 23 07:28:46 PDT 2011
On 03/23/2011 06:48 AM, teo wrote:
> How can I use properties with increment/decrement and +=/-= operators?
>
> I did following tests (the errors are from dmd v2.052):
>
> class T
> {
> private int _x;
> @property
> public int x() { return _x; }
> }
>
> void main()
> {
> int[] a;
> // case #1.1
> a.length++; // Error: a.length is not an lvalue
> // case #1.2
> a.length += 1; // Ok
>
>
> auto t = new T();
> // case #2.1
> t.x++; // Error: t.x() is not an lvalue
> // case #2.2
> t.x += 1; // Error: 't.x' is not a scalar, it is a @property int()
> // Error: incompatible types for ((t.x) += (1)):
> '@property int()' and 'int'
> // case #2.3
> t.x()++; // Error: t.x() is not an lvalue
> // case #2.4
> t.x() += 1; // Error: t.x() is not an lvalue
> }
>
> Basically I want to change the value of a member variable, which is
> accessed only through a property.
> It looks like that is partially possible with the length property of
> dynamic arrays although they probably are implemented in a different way.
You need a "write" property:
@property
{
public int x() { return _x; } // Read property
public void x(int x1) { _x = x1; } // Write property
}
As for the dynamic array length property:
void main()
{
int[] a;
++a.length; // Works
a.length += 1; // Works
a.length++; // Error: a.length is not an lvalue
}
I don't get why the error on a.length++ either. I'm curious about the
answer.
More information about the Digitalmars-d-learn
mailing list