3

可能重复:
Ruby 中的对象销毁通知
Ruby:析构函数?

#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")

在这种情况下,浏览器将被初始化函数打开。有没有办法自动退出?

4

1 回答 1

0

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

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

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

其他模式也是可能的,包括在对象中设置回调或计时器。归根结底,关键是对象应该超出范围并被垃圾收集——它们实际上不能自我毁灭。

于 2012-10-31T16:32:49.163 回答