ruby 相当于析构函数

标签 ruby destructor rubypython

<分区>

我正在使用 RubyPython导入 Python 模块。我在构造函数中执行 RubyPython.start (initialize),我想我应该在析构函数中对称地执行 RubyPython.stop,但不幸的是好像Ruby中没有析构函数:

class QDSHiveHelper
    def initialize
        RubyPython.start
        qds = RubyPython.import('blah')
        ...
    end
    def do_something
        qds.some_function
        ...
    end 
    def finalize
        RubyPython.stop
    end
end

有人可以解释一下如何完成这个吗? ObjectSpace.define_finalize 似乎不被鼓励并且有一些陷阱(不能使用闭包等)。我也可以让 RubyPython 悬空而不对其调用 stop,但我不知道会产生什么后果。最好的出路是什么?

最佳答案

有一个钩子(Hook)叫做ObjectSpace.define_finalizer当对象被销毁时调用。

关于 ruby 相当于析构函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17142970/

相关文章:

ruby-on-rails - 如何在 Rails 中创建全局实用程序函数

ruby - 使用 Bowline for Ruby 生成应用程序时出错

c++ - 为什么不递增? (构造函数)

python - 如何使用 Ruby rspec 测试 Python 代码?

Ruby 的动态注入(inject)方法不起作用

ruby-on-rails - 从 Bash -> Docker 按名称 -> Ruby -> 清除缓存

c++ - 析构函数如何执行?

c++ - 函数参数究竟何时被破坏?

python - Ruby 2.1.5 和 RubyPython 0.6.3- RubyPython::InvalidInterpreter:指定了无效的解释器