在实例化类之后有没有办法销毁* self *?

时间:2012-10-31 16:13:30

标签: ruby destructor instantiation

  

可能重复:
  Notification of object destruction in Ruby
  Ruby: Destructors?

#initialize 在实例化类时启动函数。只是想知道是否有 #uninitialize 功能。例如:

class Something
  def initialize
    @browser = Watir::Browser.new :chrome #opens browser
  end

  def stuff(url)
    @browser.goto url
  end

  def uninitalize
    @browser.quit #close browser
  end
end

s = Something.new
s.stuff("google.ca")

在这种情况下,浏览器将由initialize函数打开。有没有办法自动退出呢?

1 个答案:

答案 0 :(得分:0)

Ruby终结器不是真正的析构函数

虽然您可以为Ruby对象定义finalizers,但它们并不是真正的析构函数。事实上,直到 对象被销毁之后才会触发它们。文档说:

  

define_finalizer(obj,aProc = proc())
  添加aProc作为终结器,在obj被销毁后调用。

重新思考你的方法

不要使用#new实例化浏览器实例,而应考虑更像的模式:

class Something
  attr_accessor :browser

  def start_browser
  end

  def quit_browser
  end
end

s = Something.new
s.start_browser
s.quit_browser

其他模式也是可能的,包括在对象中设置回调或定时器。最终,重点是对象应该超出范围并进行垃圾收集 - 它们实际上不能自行销毁。