[Pharo-dev] flatCollect:

Camillo Bruni camillobruni at gmail.com
Mon Nov 4 11:54:10 EST 2013


On 2013-11-04, at 17:46, Sven Van Caekenberghe <sven at stfx.eu> wrote:

> Actually I am still confused about this, for example,
> 
>  Set new writeStream nextPut: 1; contents


This should actually work the same way as 

OrderedCollection streamContents: [ :s | s nextPut: 1 ].

or

Symbol streamContents: [ :s | s nextPutAll: 'abc' ]

> does not work, so for which non-sequenceable collections would the #flatCollect: code work ?


> I was thinking that maybe #streamContents: could be put higher up ?
> If that would not be possible, why not ?
> And how would the #flatCollect: code then work ?
> 
> On 04 Nov 2013, at 17:36, Chris Cunningham <cunningham.cb at gmail.com> wrote:
> 
>> On Sat, Nov 2, 2013 at 3:52 AM, Tudor Girba <tudor at tudorgirba.com> wrote:
>> Indeed, it would be more elegant, but streamContents: is only defined in SequeanceableCollection, so it is not generic enough.
>> 
>> So, then use the generic one where it is defined (Collection), and a more specific one that Sven suggested in SequenceableCollection.
>> 
>> -Chris
>> 
>> Doru
>> 
>> 
>> On Sat, Nov 2, 2013 at 11:21 AM, Sven Van Caekenberghe <sven at 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 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"
>> 
>> 
>> 
>> 
>> 
>> -- 
>> www.tudorgirba.com
>> 
>> "Every thing has its own flow"
>> 
> 
> 

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 447 bytes
Desc: Message signed with OpenPGP using GPGMail
URL: <http://lists.pharo.org/pipermail/pharo-dev_lists.pharo.org/attachments/20131104/07336566/attachment.asc>


More information about the Pharo-dev mailing list