|
From: | J Pfersich |
Subject: | Re: [Help-smalltalk] (no subject) |
Date: | Tue, 16 Jan 2007 15:35:53 -0700 |
At 09:01 AM 1/15/2007 +0100, Paolo Bonzini wrote:
If the value of receiver == comparand is true then the receiver and comparand must have equivalent identity hash values. Or more formally: receiver == comparand ==> receiver identityHash = comparand identityHashThis is not an "if and only if". If two objects have the same identityHash you cannot conclude that they are identical. In GNU Smalltalk "x identityHash identityHash == x identityHash" in particular, so every object's identityHash will collide with exactly one integer's identityHash.
This was the question that I needed an answer for. I saw that the spec in the ANSI document and it didn't match the behavior exhibited. Nor did it match the behavior in Squeak or VW either. I figured that something else must be used to distinguish objects because primitives are used instead of just a comparison of identityHashes.
Also note that "51546 asOop" is an error, while "51546 identityHash" is the integer 51546 itself.In the other case, (123/3) is the integer 41 rather than the fraction (41/1), so123 / 3 identityHash = 123 / (3 identityHash) = 123 / 3 = 41 (123 / 3) identityHash = 41 identityHash = 41 (123 / 3) asFraction identityHash = (41/1) identityHash = an object index ^^^^^^ this represents a Fraction object, not the value of 41/1 Paolo
[Prev in Thread] | Current Thread | [Next in Thread] |