可能重复:
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函数打开。有没有办法自动退出呢?
答案 0 :(得分:0)
虽然您可以为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
其他模式也是可能的,包括在对象中设置回调或定时器。最终,重点是对象应该超出范围并进行垃圾收集 - 它们实际上不能自行销毁。