[fpc-devel] comparing methods
Mattias Gärtner
nc-gaertnma at netcologne.de
Thu Sep 10 16:06:18 CEST 2009
Zitat von Vincent Snijders <vsnijders at vodafonevast.nl>:
> Jonas Maebe schreef:
>>
>> On 10 Sep 2009, at 14:01, Mattias Gärtner wrote:
>>
>>>>
>>>> Mattias Gärtner wrote:
>>>>> Can someone explain why in mode objfpc comparing methods only compares
>>>>> the address, but not the instance?
>>>>
>>>> Seems perfectly logical to me (@ = Address of, in this case "code
>>>> address", the code is the same for all instances of a class).
>>>
>>> OnClick:=@MyClick;
>>>
>>> The @ operator is more than "address of".
>>
>> The current behaviour has been there since svn revision 1, so it's
>> quite old and established at least (and Delphi/TP-compatible, afaik).
>
> It is delphi compatible, not really intuitive, so I would welcome a
> change in the objfpc mode.
>
> See:
> http://bugs.freepascal.org/view.php?id=9228
> http://bugs.freepascal.org/view.php?id=11868
To draw the whole picture:
var a,b: TNotifyEvent;
a=b compares only Code, not Data
a=nil compares only Data, not Code
Assigned(a) compares only Code, not Data
n.a. compares both
I wonder how many programmers know this.
Even the FCL contains code, where this leads to wrong code.
More important: I don't know a place, where a=b and a=nil are used
right. But I have seen a lot of code where it was used wrong.
Mattias
More information about the fpc-devel
mailing list