Dictionary keys that exist but can't be found
Tim Olson
tim at jump.net
Thu Apr 11 14:07:45 UTC 2002
>I've had this problem with the Dictionary class before using a class that I
>created as the key. Are there any caveats with this class I may not be aware
>of?
Here's one that I got bit by -- don't use Associations as keys:
d := Dictionary new.
d at: (1 -> 2) put: 3.
d at: (1 -> 7). "answers 3".
This is because Association inherits "=" from LookupKey, which only
compares keys for equality, so two Associations with the same key but
different values still compare equal.
I'm not sure if this is an oversight, or if Associations are purposely
this way for some subtle reason in implementing the Dictionary class.
I just tried an experiment, implementing "hash" and "=" for Associations:
----
hash
^ key hash bitXor: value hash
= anAssociation
self species = anAssociation species
ifTrue: [^key = anAssociation key and: [value = anAssociation value]]
ifFalse: [^false]
----
Nothing immediately fell over, and my broken test case now works.
Does anyone know of anything in the image that relies upon associations
comparing equal even if their respective values are different?
-- tim
More information about the Squeak-dev
mailing list
|