[squeak-dev] Re: Issues with #collect: (Was: Re: Splitting Set and Dictionary)

Andreas Raab andreas.raab at gmx.de
Sun Nov 22 00:01:33 UTC 2009


 > What do you think?

I like it a lot. It allows us to be explicit in cases where we care and 
consequently give us room to change the default if we think it's not all 
that useful.

Cheers,
   - Andreas

Levente Uzonyi wrote:
> Hi,
> 
> I uploaded a proposal to the inbox (Collections-ul.205) which tries to 
> solve the issues with #collect:.
> The idea is to let #collect: use #species and add two new interface 
> methods to the Collections hierarchy to handle exceptional cases. The 
> two methods are: #collect:into: and #collect:as:. Both work like 
> #collect:, but #collect:into: expects a Collection as it's second 
> argument and collects the values into that collection. #collect:as: 
> expects a subclass of Collection and returns an instance filled with the 
> collected values.
> 
> A few examples demonstrate possible usage:
> (1 to: 9) collect: [ :each | each asString first ] as: ByteString
>   ==> '123456789'.
> (1 to: 9) collect: [ :each | each \\ 5 ] as: Set
>   ==>  a Set(0 1 2 3 4)
> (1 to: 9) asSet collect: [ :each | 10 - each ] as: SortedCollection
>   ==> a SortedCollection(1 2 3 4 5 6 7 8 9)
> #(1 5 2 4 3) collect: #yourself as: Heap
>   ==> a Heap(1 3 2 5 4)
> (Dictionary newFrom: { #one -> 1. #two -> 2 }) collect: #squared as: 
> IdentityDictionary
>   ==> an IdentityDictionary(#one->1 #two->4 ).
> (Dictionary newFrom: { #one -> 1. #two -> 2 }) collect: #squared as: Array
>   ==> #(4 1)
> (1 to: 10) collect: [ :each | each > 1 and: [ each isPrime ] ] as: 
> Dictionary
>   ==> a Dictionary(1->false 2->true 3->true 4->false 5->true 6->false 
> 7->true 8->false 9->false 10->false )
> #(20 30 40) collect: [ :each | each // 10 ] as: IdentityDictionary
>   ==> an IdentityDictionary(1->2 2->3 3->4 )
> 
> a := #(1 2 3). a collect: #squared into: a
>   ==> #(1 4 9).
> 
> Even #collect: could be implemented as: ^self collect: aBlock as: self 
> species.
> Of course there are combinations which don't work, but i think those 
> don't make much sense. For example you can't collect a Set into a 
> Dictionary.
> 
> What do you think?
> 
> Cheers,
> Levente
> 
>> On Fri, 20 Nov 2009, Igor Stasenko wrote:
>>
>>> hmm.. WeakSet/IdentitySet>>collect: returning an instance of Set?
> 
> 




More information about the Squeak-dev mailing list