BTW, it seems #flatten in 2.0 has become #flattened in 3.0 and that too might 
needs the #species

Would it also not be better and more elegant to say

self species streamContents: [ :stream |
  … ]

?

On 02 Nov 2013, at 09:50, Sven Van Caekenberghe <[email protected]> wrote:

> 
> On 01 Nov 2013, at 23:55, Tudor Girba <[email protected]> wrote:
> 
>> Hi,
>> 
>> I see that Pharo 3.0 has a Collection>>flatCollect:. This is great as the 
>> method proved to be very valuable in the context of Moose.
>> 
>> However, the current Pharo implementation is less ideal:
>> 
>> Collection>>flatCollect: aBlock
>>      ^ Array streamContents:
>>              [:stream |
>>              self do: [:ea | stream nextPutAll: (aBlock value: ea)]]
>> 
>> The Moose one is:
>> Collection>>flatCollect: aBlock 
>>      "Evaluate aBlock for each of the receiver's elements and answer the
>>      list of all resulting values flatten one level. Assumes that aBlock 
>> returns some kind
>>      of collection for each element. Equivalent to the lisp's mapcan"
>>      "original written by a. Kuhn and released under MIT"
>>      
>>      | stream |
>>      self isEmpty ifTrue: [ ^ self copy ].
>>      stream := (self species new: 0) writeStream.
>>      self do: [ :each | stream nextPutAll: (aBlock value: each) ].
>>      ^ stream contents
>> 
>> The difference is in the type returned. The Pharo one always returns Array, 
>> while the Moose one returns a collection of the same species as the receiver.
> 
> Sounds right, returning #species.
> 
>> Does anyone have anything against the Moose implementation?
>> 
>> Doru
>> 
>> -- 
>> www.tudorgirba.com
>> 
>> "Every thing has its own flow"


Reply via email to