所以我遇到的问题是理解 = self
和 = self dup
之间的区别。当我运行下面的代码时,我放入其中的任何数组都会永久更改。
class Array
def pad(min_size, value = nil)
input = self
counter = min_size.to_i - self.length.to_i
counter.times do
input.push(value)
end
input
end
end
但后来我注意到,如果我输入 input = self.dup
它不会永久更改我的数组。有人可以解释为什么吗?谢谢!
class Array
def pad(min_size, value = nil)
input = self.dup
counter = min_size.to_i - self.length.to_i
counter.times do
input.push(value)
end
input
end
end
最佳答案
检查他们的object_id
,这会给你答案,说self
和self#dup
是2个不同的对象。
class Array
def dummy
[self.object_id,self.dup.object_id]
end
def add
[self.push(5),self.dup.push(5)]
end
end
a = [12,11]
a.dummy # => [80922410, 80922400]
a.add # => [[12, 11, 5], [12, 11, 5, 5]]
a # => [12, 11, 5]
关于ruby - 'input = self' 和 'input = self.dup' 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678335/