Indeed, it would be more elegant, but streamContents: is only defined in SequeanceableCollection, so it is not generic enough. Doru On Sat, Nov 2, 2013 at 11:21 AM, Sven Van Caekenberghe <sven@stfx.eu> wrote:
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 <sven@stfx.eu> wrote:
On 01 Nov 2013, at 23:55, Tudor Girba <tudor@tudorgirba.com> 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"
-- www.tudorgirba.com "Every thing has its own flow"