假设您有以下课程:
class Klass
include SomeModule
def some_method
SomeModule::some_proc.call(self)
end
end
这里到底发生了什么? ruby是否将'self'引用的Klass实例的完整副本加载到内存中并将该副本传递给由'some_method'调用的proc中?或者只有一个实例的副本加载到内存中?
答案 0 :(得分:3)
只有一个实例加载到内存中,Ruby会将一个引用/指针传递给你正在调用的proc。
与其他语言不同,Ruby从不自动创建对象的副本。您通常会传递对一个对象的引用。您可以通过在每个对象上调用object_id
(或inspect
)并确保ID相同来验证这两个对象是否具有相同的标识。您可以通过调用对象上的dup
或clone
来显式制作副本。