当前位置:  开发笔记 > 后端 > 正文

Ruby中对象破坏的通知

如何解决《Ruby中对象破坏的通知》经验,为你挑选了1个好方法。

我写了一个自定义的Rails模型.此模型由实际服务器支持,而不是由数据库表支持(因此它不会从中继承ActiveRecord::Base).为了从服务器获取所请求的信息,我打开了一个SSH连接.由于rails不重用对象,因此将为接收到的请求创建新对象以及与服务器的新SSH连接.为了减少服务器压力,我想在模型对象被垃圾收集之前关闭SSH连接.我想知道ruby是否提供通知机制来通知对象它将被销毁?如果是这样,我可以使用此通知知道何时关闭SSH连接.如果不是,当我知道我已完成对象时,我将需要手动操作.

如果我需要手动处理这个,我可以明确地销毁对象吗?或者我能做的最好的是object = nil



1> Adam Davis..:

如果你需要控制一个对象被销毁时会发生什么,你真的应该自己明确地销毁它 - 这是设计的.你不应该明确地破坏一个对象 - 这也是设计的.

换句话说,从程序的角度来看,对象永远不会被破坏或破坏.出于这些原因,您应该重新考虑问题(这不是一个不常见的需求 - 当不再需要对象时释放资源),因此它适合Ruby范例.

将对象设置为nil会给垃圾收集器提示,但不一定会立即销毁它.

但是,如果您必须让垃圾收集器处理它,那么请继续阅读.

没有对析构函数的直接支持,但是当它被销毁时你可以让它调用终结函数.

根据http://pleac.sourceforge.net/pleac_ruby/classesetc.html,如果它包含对原始对象的引用,则它可能不会被垃圾收集,因此必须是类方法而不是实例方法.

class MyClass
    def initialize
        ObjectSpace.define_finalizer(self,
                                     self.class.method(:finalize).to_proc)
    end
    def MyClass.finalize(id)
        puts "Object #{id} dying at #{Time.new}"
    end
end

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有