Ruby的tempfile实例在引用被释放时会自动删除相应的文件。然而,我有一台机器上并非如此。代码如下:
irb> require 'tempfile'
=> true
irb> t = Tempfile.new('test32')
=> #<File:/tmp/test32.27778.0>
irb> exit
在我所有的测试机器上,这将导致test32被删除,除了一个。我已经尝试使用
File.delete
来删除文件,不幸的是它可以正常工作。我是否缺少某些Ruby配置?Ruby版本为:
ruby 1.8.6 (2009-06-08 patchlevel 369) [i686-linux].
编辑:在与DigitalRoss的交谈中,出现了一些额外的信息:如果我明确释放Tempfile引用(t = nil),那么Tempfile就会被清除。 可能GC已经被修补或改变了某种需要这样做的方式吗?
这是一些可以在“好”的机器上运行但在“坏”的机器上失败的代码。
include ObjectSpace
t = "blah"
define_finalizer(t, proc {|id| print "yes finalized id=#{id}", "\n" })
在有问题的机器上,只有当我明确将 t 设置为 nil 时,“yes finalized”才会打印出来。