I would just remove the method. Probably the best fix ever.
On 14 January 2012 12:55, Mariano Martinez Peck <[email protected]>wrote: > > > ---------- Forwarded message ---------- > From: Larry White <[email protected]> > Date: Tue, Jan 10, 2012 at 12:52 AM > Subject: Re: [Pharo-users] another confusing result > To: A friendly place where any question about pharo is welcome < > [email protected]> > > > Thanks. I wonder if this method needs to stay the same for compatibility > reasons or if it could be modified in Pharo to produce a less surprising > result. In other words, is this a bug or a feature? > > > On Mon, Jan 9, 2012 at 1:41 PM, Runar Jordahl <[email protected]>wrote: > >> Here is a copy of something I wrote about this earlier: >> >> In Pharo 1.3, SequenceableCollection>>combinations:atATimeDo: will, >> for all combinations, send the same collection instance as argument >> for the block. Therefore, if you use this collection itself, you will >> be surprised: >> >> |answer| >> answer := OrderedCollection new. >> #(a b c) combinations: 2 atATimeDo: [:each | answer add: each]. >> answer >> >> Here I expect to end up with a collection looking like this: >> 1: #(#a #b) >> 2: #(#a #c) >> 3: #(#b #c) >> >> But I end up with: >> 1: #(#c #c) >> 2: #(#c #c) >> 3: #(#c #c) >> >> One fix is to change the client code to copy the argument for the block: >> |answer| >> answer := OrderedCollection new. >> #(a b c) combinations: 2 atATimeDo: [:each | answer add: each copy]. >> answer >> >> Another solution is enhancing >> SequenceableCollection>>combinationsAt:in:after:do: to copy the >> collection: >> nn + 1 to: self size do: [ :index | >> aCollection at: jj put: (self at: index). >> jj = aCollection size >> ifTrue: [ aBlock value: aCollection copy ] >> ifFalse: [ >> self >> combinationsAt: jj + 1 >> in: aCollection >> after: index >> do: aBlock ] ] >> >> >> >> Kind regards >> Runar Jordahl >> >> > > > > -- > Mariano > http://marianopeck.wordpress.com > > -- Milan Mimica http://sparklet.sf.net
