当您在红宝石中传递物体时会发生什么?

时间:2014-06-24 21:48:24

标签: ruby oop proc

假设您有以下课程:

class Klass
  include SomeModule
  def some_method
    SomeModule::some_proc.call(self)
  end
end

这里到底发生了什么? ruby是否将'self'引用的Klass实例的完整副本加载到内存中并将该副本传递给由'some_method'调用的proc中?或者只有一个实例的副本加载到内存中?

1 个答案:

答案 0 :(得分:3)

只有一个实例加载到内存中,Ruby会将一个引用/指针传递给你正在调用的proc。

与其他语言不同,Ruby从不自动创建对象的副本。您通常会传递对一个对象的引用。您可以通过在每个对象上调用object_id(或inspect)并确保ID相同来验证这两个对象是否具有相同的标识。您可以通过调用对象上的dupclone来显式制作副本。