[Pharo-dev] flatCollect:

Sven Van Caekenberghe sven at stfx.eu
Sat Nov 2 04:50:53 EDT 2013


On 01 Nov 2013, at 23:55, Tudor Girba <tudor at 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"





More information about the Pharo-dev mailing list