[squeak-dev] Re: Dictionary>>collect: returning OrderedCollection?

Paolo Bonzini bonzini at gnu.org
Sat Jun 14 00:33:34 UTC 2008


>> Messages inherited from the class Collection -- includes:, do: and 
>> other enumeration messages -- are applied to the *values* of the 
>> Dictionary. That is, these messages refer to the values of each 
>> association in the Dictionary, rather than to the keys or to the 
>> associations themselves.
>
> With all the respect due to the holly blue book and its authors,
> it is not the bible. 

Actually, the "modern" view of Dictionary as a "keyed collection with 
external keys" (external = given by the user) does not conflict at all 
with the blue book definition.  Like #do:, #collect: only works on the 
values -- but like on the other keyed collections, i.e. 
SequenceableCollections, the keys are preserved.

 From here, one can define by extension the obvious meaning of #select: 
and #reject: for a dictionary.  Note that this meaning is different 
between sequenceable collections and dictionaries, because answering 
false (resp. true) will change the keys of all subsequent values in a 
sequenceable collection!

Note that this:

> associationsCollect: aBlock
> 	...
> 	self associationsDo: [ :assoc | d nextPut: assoc key -> (aBlock value: assoc 
               value) ].

would be very wrong, because associationsSomething: messages work on 
associations, while your message passes only the value to the block.  An 
hypothetical associationsCollect: would do

associationsCollect: aBlock
	| d |
	d := Dictionary new.
	self associationsDo: [ :assoc | d add: (aBlock value: assoc) ]

and I have nothing against it. :-)

Paolo



More information about the Squeak-dev mailing list