首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有重新定义/禁用self.new的方法?

是否有重新定义/禁用self.new的方法?
EN

Stack Overflow用户
提问于 2018-05-13 08:02:31
回答 1查看 80关注 0票数 2

我正在设法找到一种方法来安全地释放一个类获得的资源。我试过使用finalize,但它不可靠。有时,在GC有机会释放资源之前,我会关闭我的程序。

因此,我决定在这样的块中使用类实例:

代码语言:javascript
运行
复制
class Foo

  def destroy # free resources
      #...
  end

  #...

  def self.create(*args)
      instance = self.new(*args)
      begin
        yield instance
      ensure
        instance.destroy
      end
end

Foo.create do |foo|
  # use foo
end

这很好,但我仍然可以使用new创建一个必须显式destroy的实例。我试图编写自己的new,但在默认情况下,它似乎只是重载了new

是否有办法重新定义\禁用new

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-14 06:33:43

那就是initialize方法,应该是private

代码语言:javascript
运行
复制
class Foo
  @foo : String

  private def initialize(@foo)
  end

  def destroy
    puts "Destroying #{self}"
  end

  def self.create(arg)
    instance = new(arg)
    yield instance
  ensure
    instance.destroy if instance
  end
end

Foo.create("bar") do |foo| # will work
  p foo
end

Foo.new("bar")             # will raise

游乐场

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50314022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档