在ruby中删除类实例
我一直在尝试删除一个类实例。以下是我想要的:在ruby中删除类实例,ruby,class,Ruby,Class,我一直在尝试删除一个类实例。以下是我想要的: class SomeClass def initialize some_stuff end def delete self.delete end end 调用SomeClass\u instance.delete会得到: SystemStackError: stack level too deep 如果没有定义delete方法,它会给我一个NoMethodError 我尝试的每件事要么给我错误,要么什么也不做。如果
class SomeClass
def initialize
some_stuff
end
def delete
self.delete
end
end
调用SomeClass\u instance.delete
会得到:
SystemStackError: stack level too deep
如果没有定义delete
方法,它会给我一个NoMethodError
我尝试的每件事要么给我错误,要么什么也不做。如果有人能解释删除类实例是如何工作的,或者如果有可能的话,那就太好了。当您用垃圾收集标记请求时,我假设您试图做的事情类似于C中的
free
Ruby中的垃圾收集是自动进行的。一旦对象不再在内存中的任何位置被引用,该对象使用的内存将在下一个GC循环中重新收集
您不需要手动释放内存。只需确保不要在变量中保留对对象的引用,尤其是在方法范围之外的变量中,例如全局变量、实例变量或类变量。通过
删除可以实现什么?为什么不将其分配给nil
?在方法delete
的上下文中,self.delete
与调用delete
相同,这就是为什么会出现SystemStackError
。使用名为foo
的方法调用self.foo
也是一样的。我知道GC是自动发生的,但仅仅删除引用本身就足够了吗?假设我有一个实例“my_instance=Class.new”,我添加了“my_instance=nil”,这足以删除引用吗?@Dr.hoeniker:如果没有其他引用,那么是的,最终将收集该实例。@Dr.hoeniker:不确定类对象是否得到相同的处理(在您的示例行中,instance=Class.new
)。我敢打赌,类对象进入某个注册表,该注册表保存对它们的引用。但是您的常规程序不会创建数百万个动态一次性类。