Ruby中的对象赋值

前端之家收集整理的这篇文章主要介绍了Ruby中的对象赋值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
来自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)将对象标识符转换为对象的注释进行更新.

猜你在找的Ruby相关文章