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