什么是“终止对象”,为什么我不能在其上调用方法?

时间:2011-01-13 06:41:27

标签: ruby hpricot

我定期得到这个例外:

NotImplementedError: method `at' called on terminated object

在这行代码上:

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

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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

这可能是一个链接问题。检查您是否未将扩展名链接两次。