0

LibXML::XML::Document#find 的文档提到需要使用以下代码样式来避免段错误:

nodes = doc.find('/header')
nodes.each do |node|
  ... do stuff ...
end

这就是我需要做的吗?在示例代码框下方有一些注释掉的代码:

# nodes = nil # GC.start

我是否还需要包含此代码以确保避免出现段错误?我不会想到第一块代码中显示的样式对参考问题有很大帮助。我在没有注释掉的代码的情况下尝试了它,并且在处理大量文件后没有任何问题,但也许它在极少数情况下会突然出现。

4

1 回答 1

0

不。注释掉的代码看起来作者担心与 GC 交互的问题,正如后续提到的那样

当进程终止时,Ruby 有时会在节点对象之前释放文档对象,从而导致分段错误。

在有人问之前,nodes 类有一个标记函数,告诉 Ruby 它依赖于文档。标记功能工作正常,如果在测试代码末尾添加以下两行代码一切正常:

节点 = 无

GC.start


我不会太担心,因为:

(a) 问题指2008年的图书馆

(b) 我们中的许多人都使用过 LibXML,除了使用起来很痛苦之外,它又快又稳定,所以作者一定已经解决了他的问题。

如果您正在寻找替代品,请看这里

克里斯

于 2010-02-19T11:36:49.523 回答