替换方法调用上的变量值

时间:2012-12-05 15:07:17

标签: ruby variables methods

假设我有以下课程:

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

执行onil将为delete。有什么想法吗?

3 个答案:

答案 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}

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

编辑:不,不聪明