ruby - 'input = self' 和 'input = self.dup' 有什么区别

标签 ruby arrays self

所以我遇到的问题是理解 = 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,这会给你答案,说selfself#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/

相关文章:

ruby-on-rails - BlueHost - 没有这样的文件或目录服务器是否在本地运行并接受 Unix 域套接字 "/tmp/.s.PGSQL.5432"上的连接

ruby - Stripe 检索所有客户的发票 - 不是指定的客户

ruby-on-rails - 如何使用 RubyZIP 将现有文件添加到 ZIP 文件?

数组中的 Javascript 对象引用

javascript - 通过过滤国家/地区属性对对象中的所有值求和 - javascript

sql - 使用 SQL 查询的 TreeView

javascript - 为什么 'self' 在原型(prototype)的成员函数中可用?

ruby - 在 Ruby on Rails 中计算/存储 line_item 总数的最佳方法是什么?

java - java中如何检查未初始化的数组引用?

python - __init__.storing 是什么信息?