加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby中的对象赋值

发布时间:2020-12-16 23:33:43 所属栏目:百科 来源:网络整理
导读:来自c背景我很好奇Ruby中的对象赋值.应对以下对象分配进行哪些考虑(如果有): class MyClass attr_accessor :a,:b def initialize(a,b) @a = a @b = b end def some_method puts "#{self.a} #{self.b}" endendm = MyClass.new("first","last")n = MyClass.ne
来自c背景我很好奇Ruby中的对象赋值.应对以下对象分配进行哪些考虑(如果有):
class MyClass

  attr_accessor :a,:b

  def initialize(a,b)
    @a = a
    @b = b
  end

  def some_method
    puts "#{self.a} #{self.b}"
  end
end

m = MyClass.new("first","last")
n = MyClass.new("pizza","hello")

q = n
q.some_method

解决方法

如果您熟悉C,那么您可能希望将Ruby中的每个变量(实例或其他变量)视为对另一个对象的引用.因为Ruby中的所有东西都是一个对象,即使是nil,它的类型为NilClass,这在任何情况下都适用.

要确定您引用的对象,可以使用object_id方法进行区分.这与使用&转换为指针类似.在C.

考虑一下:

a = "foo"
b = a

a.object_id == b.object_id
# => true

由于a是对该字符串的引用,而b是a的副本,因此它们实际上是对同一对象的不同引用.

这很重要,因为修改对象的操作会同时影响对该对象的所有引用:

a << "bar"
# => "foobar"
b
# => "foobar"

但是,创建新对象的操作不会修改所有副本:

a += "baz"
# => "foobarbaz"
b
# => "foobar"

Ruby中的许多方法都是由a来识别的!区分就地版本和新版本版本,但情况并非总是如此,因此您必须熟悉每种方法才能确定.

通常,赋值将使用新引用替换旧引用,因此根据经验,=将替换旧引用.这适用于=,– =,|| =,&& =等等.

编辑:根据Phrogz关于使用ObjectSpace._id2ref(object_id)将对象标识符转换为对象的注释进行更新.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读