替换的方法调用变量值
问题描述:
比方说,我有下面的类:替换的方法调用变量值
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
执行。有任何想法吗?
答
正如上面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?
但我不建议这样做,因为它可能会使用你的代码迷惑人。
答
如果你想获得的MyClass
所有实例的数组,所有你需要做的是
ObjectSpace.each_object(MyClass).to_a
如果你想消灭实例的MyClass
o
因为o
没有提及其他地方,然后让o
参考其他
o = nil
的东西在一段时间后,该对象将被垃圾收集。
答
一种可能性是:
vars = Kernel.global_variables + Kernel.local_variables
vars.map{|var| var=nil if var == self}
但是,我不认为这是一个聪明的一个...
编辑:不,不聪明都
+0
非常有趣。但是,即使内核不知道它,也就是说,在执行上下文中仍然存在对该对象的引用。 – Candide
这是不可能的:您只能修改对象本身,而不是'o',它是对它的引用,并且不能从'delete'方法访问。 – Eureka