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
identityHash
>
>This 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), so
>
> 123 / 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
_______________________________________________
help-smalltalk mailing list
help-smalltalk gnu.org
http://lists.gnu.org/mailman/listinfo/help-smalltalk
|