On Wed, 20 Feb 2008 22:12:57 +0100, nicolas cellier wrote:

Klaus D. Witzel a écrit :
On Wed, 20 Feb 2008 00:59:57 +0100, nicolas cellier wrote:
 ...
I see, become: does exchange #identityHash, and that makes our IdentityDictionary work, god thanks, but there is no such provision for ordinary #hash and Dictionary...
But there are sufficient provisions in place, since Smalltalk-80, and most Dictionary users know about them :)

However, there are plenty of ordinary things that would have the same result:

| key1 key2 dic |
key1 := 'abc' copy.
key2 := 'abd' copy.
dic := Dictionary new.
dic at: key1 put: 1.
dic at: key2 put: 2.
key1 at: 1 put: $z.
  dic rehash "synopsis: re-establish hash invariants, if any ".

{dic includesKey: key1.
dic keys includes: key1.}

So i propose newbies do not use #at:put: considering the danger about Dictionary not finding their keys...
There's no danger with Dictionary not finding its keys, unless you yourself do not follow the protocol. Smalltalk has no such problems; developers use #rehash after they changed the #= of keys in Set and subclasses; and please, don't tell the newcomers the contrary :)


Agree.
Thanks for this good lesson based on my so dumb example.
Wouldn't this deserve a longer (Dictionary comment) ?

You're right, the invariant is *essential* for Set and its subclasses, alas no word about it in its class comment. Please open a bug report (with severity "text"); current policy is that this then gets included in the next release.

That's too much.
No not too much; in other languages (especially the "popular" ones) you are not even allowed to change you strings-now *that* is too much ;-) But in Smalltalk you are supported, right from the beginning; happy Smalltalking everybody :)
 /Klaus

Too much was the idea of forbidding #become: or #at:put: for a wrong reason (Dictionary rehash).

Nicolas


_______________________________________________
Beginners mailing list
Beginners@lists.squeakfoundation.org
http://lists.squeakfoundation.org/mailman/listinfo/beginners

Reply via email to