Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
December 29, 2009 property/opAddAssign problem | ||||
---|---|---|---|---|
| ||||
Consider following: class A { int m; void opAddAssign(int n) { m += n; } } class B { A a; this() { a = new A; } A Prop() { return a; } } void main() { B b = new B; b.Prop += 3; } I get a compilation error (dmd v2.037): test.d(17): Error: 'b.Prop' is not a scalar, it is a A() test.d(17): Error: incompatible types for ((b.Prop) += (3)): 'A()' and 'int' Am I doing something wrong, or is this a known issue with opAddAssign and/ or properties? |
December 29, 2009 Re: property/opAddAssign problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to teo | On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@yahoo.com> wrote:
> Consider following:
>
> class A
> {
> int m;
> void opAddAssign(int n) { m += n; }
> }
>
> class B
> {
> A a;
> this() { a = new A; }
> A Prop() { return a; }
> }
>
> void main()
> {
> B b = new B;
> b.Prop += 3;
> }
>
> I get a compilation error (dmd v2.037):
>
> test.d(17): Error: 'b.Prop' is not a scalar, it is a A()
> test.d(17): Error: incompatible types for ((b.Prop) += (3)): 'A()' and
> 'int'
>
> Am I doing something wrong, or is this a known issue with opAddAssign and/
> or properties?
This is part of the issue with properties that will be fixed with the @property annotation.
try
b.Prop() += 3;
-Steve
|
December 29, 2009 Re: property/opAddAssign problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tue, 29 Dec 2009 09:10:14 -0500, Steven Schveighoffer <schveiguy@yahoo.com> wrote:
> On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@yahoo.com> wrote:
>
>> Consider following:
>>
>> class A
>> {
>> int m;
>> void opAddAssign(int n) { m += n; }
>> }
>>
>> class B
>> {
>> A a;
>> this() { a = new A; }
>> A Prop() { return a; }
>> }
>>
>> void main()
>> {
>> B b = new B;
>> b.Prop += 3;
>> }
>>
>> I get a compilation error (dmd v2.037):
>>
>> test.d(17): Error: 'b.Prop' is not a scalar, it is a A()
>> test.d(17): Error: incompatible types for ((b.Prop) += (3)): 'A()' and
>> 'int'
>>
>> Am I doing something wrong, or is this a known issue with opAddAssign and/
>> or properties?
>
> This is part of the issue with properties that will be fixed with the @property annotation.
>
> try
>
> b.Prop() += 3;
Eventually, marking Prop as a @property should also work (haven't tested it, it may work now):
@property A Prop() { return a; }
...
b.Prop += 3; // compiles
-Steve
|
December 29, 2009 Re: property/opAddAssign problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Tue, 29 Dec 2009 09:12:15 -0500, Steven Schveighoffer wrote: > On Tue, 29 Dec 2009 09:10:14 -0500, Steven Schveighoffer <schveiguy@yahoo.com> wrote: > >> On Tue, 29 Dec 2009 09:01:38 -0500, teo <teo.ubuntu.remove@yahoo.com> wrote: >> >>> Consider following: >>> >>> class A >>> { >>> int m; >>> void opAddAssign(int n) { m += n; } >>> } >>> >>> class B >>> { >>> A a; >>> this() { a = new A; } >>> A Prop() { return a; } >>> } >>> >>> void main() >>> { >>> B b = new B; >>> b.Prop += 3; >>> } >>> >>> I get a compilation error (dmd v2.037): >>> >>> test.d(17): Error: 'b.Prop' is not a scalar, it is a A() test.d(17): >>> Error: incompatible types for ((b.Prop) += (3)): 'A()' and 'int' >>> >>> Am I doing something wrong, or is this a known issue with opAddAssign >>> and/ >>> or properties? >> >> This is part of the issue with properties that will be fixed with the @property annotation. >> >> try >> >> b.Prop() += 3; Thanks. This trick works, but it looks a bit weird. > > Eventually, marking Prop as a @property should also work (haven't tested > it, it may work now): > > @property A Prop() { return a; } > > ... > > b.Prop += 3; // compiles > > -Steve Unfortunately it doesn't: test.d(17): Error: 'b.Prop' is not a scalar, it is a @property A() test.d(17): Error: incompatible types for ((b.Prop) += (3)): '@property A ()' and 'int' |
December 29, 2009 Re: property/opAddAssign problem | ||||
---|---|---|---|---|
| ||||
Posted in reply to teo | On Tue, 29 Dec 2009 13:44:18 -0500, teo <teo.ubuntu.remove@yahoo.com> wrote:
> On Tue, 29 Dec 2009 09:12:15 -0500, Steven Schveighoffer wrote:
>>
>> Eventually, marking Prop as a @property should also work (haven't tested
>> it, it may work now):
>>
>> @property A Prop() { return a; }
>>
>> ...
>>
>> b.Prop += 3; // compiles
>>
>> -Steve
>
> Unfortunately it doesn't:
>
> test.d(17): Error: 'b.Prop' is not a scalar, it is a @property A()
> test.d(17): Error: incompatible types for ((b.Prop) += (3)): '@property A
> ()' and 'int'
>
It will evenutally, probably within the next couple releases.
-Steve
|
Copyright © 1999-2021 by the D Language Foundation