opCall() @property

Zhenya zheny at list.ru
Fri Jun 29 13:20:35 PDT 2012


On Friday, 29 June 2012 at 20:13:58 UTC, Jonathan M Davis wrote:
> On Friday, June 29, 2012 21:54:42 Zhenya wrote:
>> I see, I just thought that opCall @ property equivalent 
>> opAssign
>> and wanted to check it out, and now I would be interested to
>> understand why it is not
>
> I don't see how you could think that it _would_ be. The _only_ 
> way that opCall
> can be invoked is by using the variable as if it were a 
> function.
>
> struct X
> {
>  bool _x;
>  A opCall(bool x) {_x = x;return this;}
> }
>
> x(false);
>
> Without those parens, the compiler has no idea that you're 
> trying to use
> opCall. opCall is specifically for being able to call a 
> variable as if it were
> a function. By using =, you're making the compiler look for 
> opAssign
>
> x = false;
>
> because that's the function for overloading =. You're only 
> going to be able to
> make a function a property when it would be used as a function 
> if it wasn't
> declared as a property, and neither opCall or opAssign is used 
> as a function
> (e.g x.opCall(), x.opAssign()). They're both overloading 
> operators. @property
> is specifically for making a function act as if it were a 
> variable, and
> overloaded operators aren't used as either functions or 
> variables. They
> overload _operators_.
>
> Off the top of my head, the _only_ overloaded operator that I 
> can think of
> where it would make any sense to declare it @property would be 
> opDispatch,
> because it's replacing function calls, but there are problems 
> with that,
> because you can't have two opDispatches, so you can't use it 
> for both
> properties and normal functions.
>
> - Jonathan M Davis
Thank you,I understood.



More information about the Digitalmars-d-learn mailing list