---------- 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

Reply via email to