Joel VanderWerf
5/26/2009 4:57:00 PM
Peng Zuo wrote:
> Hi,I'm using ruby 1.87. this problem seems to be the block context bug for
> 1.8x, in the results array, I always got the same value, which is the last
> return value of the iteration .
> I've got an object, which has multiple states. when I call each_state, I'm
> actually changing the state.
>
> results = []
> an_object.each_state do |the_object|
> #some manipulations
> results << the_object
> end
>
> the each_state method looks like:
>
> def each_state
> #blah blah, change the current state
> yield(self) # I also tried self.dup, but it didnt work either.
> end
I'm guessing what you want is for results[i] to be a snapshot of the
object as it is in the i-th state?
If dup doesn't work, maybe your object has some other objects attached
to it in which you are storing something? In that case, try a deep copy:
Marshal.load(Marshal.dump(self))
--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407