[Newbies] Re: ordinary #hash and Dictionary [was: Recap: How to empty a collection]

nicolas cellier ncellier at ifrance.com
Wed Feb 20 21:12:57 UTC 2008


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) ?

>> 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



More information about the Beginners mailing list