On 2013-11-04, at 17:46, Sven Van Caekenberghe <[email protected]> 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 <[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" >> > >
signature.asc
Description: Message signed with OpenPGP using GPGMail
