Report abuse


			
class Klass
  @array = [1,2,3]

  def self.fuckup
    backup = @array.dup
    puts "backedup: #{@array.inspect}"
    3.times do |n|
      puts "loop #{n + 1}"
      @array.map!{|x| x * 2}
      puts "  modified: #{@array.inspect}"
      # Do something here
      @array = backup
      puts "  restored: #{@array.inspect}"
    end
    puts "final: #{@array.inspect}"
  end

  def self.dont_fuckup
    # Restoring @array to original value from class declaration
    @array = [1,2,3]

    backup = @array.dup
    puts "backedup: #{@array.inspect}"
    3.times do |n|
      puts "loop #{n + 1}"
      @array.map!{|x| x * 2}
      puts "  modified: #{@array.inspect}"
      # Do something here
      @array = backup.dup # IMPORTANT!
      puts "  restored: #{@array.inspect}"
    end
    puts "final: #{@array.inspect}"
  end
end

puts "fucking up!"
Klass.fuckup

puts "\nnot fucking up!"
Klass.dont_fuckup

Outputs


			
sneaky:dev rsl$ ruby test.rb
fucking up!
backedup: [1, 2, 3]
loop 1
  modified: [2, 4, 6]
  restored: [1, 2, 3]
loop 2
  modified: [2, 4, 6]
  restored: [2, 4, 6]
loop 3
  modified: [4, 8, 12]
  restored: [4, 8, 12]
final: [4, 8, 12]

not fucking up!
backedup: [1, 2, 3]
loop 1
  modified: [2, 4, 6]
  restored: [1, 2, 3]
loop 2
  modified: [2, 4, 6]
  restored: [1, 2, 3]
loop 3
  modified: [2, 4, 6]
  restored: [1, 2, 3]
final: [1, 2, 3]