can you open a bug entry because improving this part would be good.

On Nov 9, 2013, at 8:48 AM, Tudor Girba <[email protected]> wrote:

> I meant having what Sven mentioned: 
> 
> Collection>>streamContents:
> 
> Right now, we only have it in SequeanceableCollection.
> 
> Doru
> 
> 
> 
> On Sat, Nov 9, 2013 at 1:27 AM, Stéphane Ducasse <[email protected]> 
> wrote:
> 
> On Nov 4, 2013, at 9:40 PM, Tudor Girba <[email protected]> wrote:
> 
>> Indeed, it would be great to have a polymorphic message for constructing 
>> collections. In the meantime, there are three flatCollect: methods:
> 
> 
> doru do you have an example of what you mean ?
> 
> 
> For flaCollect: I let you discuss because I'm not enough concentrated but I 
> was when we worked on it long time ago.
> 
> 
> 
> 
>> 
>> 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"
>>      
>>      | stream |
>>      self isEmpty ifTrue: [ ^ self copy ].
>>      stream := (self species new: 0) writeStream.
>>      self do: [ :each | stream nextPutAll: (aBlock value: each) ].
>>      ^ stream contents
>> 
>> Set>>flatCollect: aBlock 
>>      ^self flatCollectAsSet: aBlock
>> 
>> SortedCollection>>flatCollect: aBlock
>>      ^ self flatCollect: aBlock as: OrderedCollection
>> 
>> Doru
>> 
>> 
>> On Mon, Nov 4, 2013 at 6:02 PM, Chris Cunningham <[email protected]> 
>> wrote:
>> Right.  I hadn't looked closely enough at the Moose one.  Actually, if you 
>> dig it a bit deeper, #writeStream isn't defined in the Collection hierarchy 
>> until you get to SequenceableCollection in any case, so the Moose version is 
>> defined too high.
>> 
>> So, if there is a desire for #flatCollect: outside of 
>> SequenceableColleciton, then this should work (based on Moose version):
>> 
>> 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"
>>      
>>      | result |
>>      self isEmpty ifTrue: [ ^ self copy ].
>>      result := (self species new: 0).
>>      self do: [ :each | result addAll: (aBlock value: each) ].
>>      ^ result
>> 
>> 
>> SequenceableCollection>>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 ].
>>      ^self species streamContents: [ :stream |
>>          self do: [ :each | stream nextPutAll: (aBlock value: each) ]
>> 
>> 
>> -Chris
>> On Mon, Nov 4, 2013 at 8:46 AM, Sven Van Caekenberghe <[email protected]> wrote:
>> Actually I am still confused about this, for example,
>> 
>>   Set new writeStream nextPut: 1; contents
>> 
>> 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 <[email protected]> wrote:
>> 
>> > On Sat, Nov 2, 2013 at 3:52 AM, Tudor Girba <[email protected]> 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 <[email protected]> 
>> > 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 <[email protected]> wrote:
>> >
>> > >
>> > > On 01 Nov 2013, at 23:55, Tudor Girba <[email protected]> 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"
>> >
>> 
>> 
>> 
>> 
>> 
>> 
>> -- 
>> www.tudorgirba.com
>> 
>> "Every thing has its own flow"
> 
> 
> 
> 
> -- 
> www.tudorgirba.com
> 
> "Every thing has its own flow"

Reply via email to