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"
