[Pharo-dev] flatCollect:

Sven Van Caekenberghe sven at stfx.eu
Sat Nov 2 06:21:45 EDT 2013


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 at stfx.eu> wrote:

> 
> 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