Zitat von Vincent Snijders <vsnijd...@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

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to