2011-01-13 38 views
6

周期性我得到这个异常:什么是“终止对象”,为什么我不能调用它的方法?

NotImplementedError: method `at' called on terminated object 

在这行代码:

next if Hpricot(html).at('a') 

这个错误是什么意思?我怎样才能避免它?

+0

如果您在整个循环之前将'Hpricot(html)'的结果赋值给一个变量,而不是每次都执行它,它会发生吗? –

+0

'html'是循环参数,所以我不能在*循环之前这样做,虽然我可以在循环的顶部做一些像'doc = Hpricot(html)'的文件,并执行'doc.at('一个')'。我试试这个 –

回答

0

这可能是一个链接问题。检查你没有连接两次扩展。

+0

通过“连接扩展两次”,你的意思是“需要扩展两次”吗? (是否“要求”旨在确保这不会导致问题?) –

1

您正在使用的库使用自定义C扩展。在C扩展中,它试图调用一个已经被垃圾收集的Ruby对象的方法。

这不会发生在纯Ruby中,因为垃圾收集器将只释放不再可从任何引用访问的对象。但是在C语言中,在垃圾回收器不检查的地方(例如,编译器可能已经将变量放入CPU寄存器),可以将引用保留给Ruby对象。

相关问题