Что такое «завершенный объект» и почему я не могу вызывать методы для него? - PullRequest
6 голосов
/ 13 января 2011

Периодически я получаю это исключение:

NotImplementedError: method `at' called on terminated object

в этой строке кода:

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

Что означает эта ошибка?Как я могу избежать этого?

Ответы [ 2 ]

2 голосов
/ 14 мая 2014

Используемая вами библиотека использует собственное расширение Си.В расширении C он пытается вызвать метод для объекта Ruby, который уже был собран сборщиком мусора.

Этого не может быть в чистом Ruby, поскольку сборщик мусора будет освобождать только те объекты, которые небольше доступно из любой ссылки.Но в C можно оставить ссылку на объект Ruby в месте, которое сборщик мусора не проверяет (например, компилятор может поместить переменную в регистр ЦП).

0 голосов
/ 27 июня 2011

Это может быть проблема со связыванием.Убедитесь, что вы не связывали расширение дважды.

...