Indeed, it would be more elegant, but�streamContents: is only defined in SequeanceableCollection, so it is not generic enough.
DoruOn 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"
--"Every thing has its own flow"