替换的方法调用变量值

问题描述:

比方说,我有下面的类:替换的方法调用变量值

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 

而且onildelete执行。有任何想法吗?

+4

这是不可能的:您只能修改对象本身,而不是'o',它是对它的引用,并且不能从'delete'方法访问。 – Eureka

正如上面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?但我不建议这样做,因为它可能会使用你的代码迷惑人。

+0

@ user1130886你是什么意思? – Candide

+0

对不起,刚习惯在StackOverflow上写评论。以为我正在写一个答案,而不是一个评论 – KenGey

如果你想获得的MyClass所有实例的数组,所有你需要做的是

ObjectSpace.each_object(MyClass).to_a 

如果你想消灭实例的MyClasso因为o没有提及其他地方,然后让o参考其他

o = nil 

的东西在一段时间后,该对象将被垃圾收集。

一种可能性是:

vars = Kernel.global_variables + Kernel.local_variables 
vars.map{|var| var=nil if var == self} 

但是,我不认为这是一个聪明的一个...

编辑:不,不聪明都

+0

非常有趣。但是,即使内核不知道它,也就是说,在执行上下文中仍然存在对该对象的引用。 – Candide