假设我有以下课程:
class MyClass
@@instances = []
def initialize
@@instances << self
end#def
def delete
@@instances.delete(self)
#what now??
self.replace nil #doesn't do the trick
end#def
end#class
我想做以下事情:
o = MyClass.new
o.delete
执行o
时nil
将为delete
。有什么想法吗?
答案 0 :(得分:1)
如果你想获得MyClass
所有实例的数组,你需要做的只是
ObjectSpace.each_object(MyClass).to_a
如果您希望销毁o
的实例MyClass
,而o
未在其他任何地方引用,则让o
引用其他内容
o = nil
稍后,该对象将被垃圾收集。
答案 1 :(得分:0)
正如Eureka上面指出的那样,这是无法做到的。但是,您可以实现类似的语义:
class MyClass
def delete
....
is_deleted
end
def is_deleted
check_some_conditions
end
end
然后,您的语法将是:
o = MyClass.new
if o.delete.is_deleted
...
end
你也可以覆盖nil?
,但我不推荐它,因为它可能会让使用你代码的人感到困惑。
答案 2 :(得分:0)
一种可能性可能是:
vars = Kernel.global_variables + Kernel.local_variables
vars.map{|var| var=nil if var == self}
但是,我认为这不是一个聪明的人......
编辑:不,不聪明