有没有办法重新定义/禁用自我.new?



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

所以我决定在这样的块中使用类实例:

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

这工作正常,但我仍然可以使用我必须明确destroynew创建一个实例。我试图编写自己的new但似乎默认情况下它只是超载new.

有没有办法重新定义\禁用new

这是initialize方法,应该private

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

操场

相关内容

  • 没有找到相关文章

最新更新