HttpParty::Response и try(:parsed_response) странное поведение

Я пытался использовать ActiveSupport (2.3-стабильный) try() на экземпляре HttpParty::Response. У меня довольно странное поведение:

> ro.parsed_response
{"error"=>"RecordInvalid", "description"=>"Record validation errors", "details"=>{"email"=>     [{"description"=>"Email: foo@bar.com is already taken by another user"}]}}

> ro.try(:parsed_response)
NoMethodError Exception: undefined method `parsed_response' for #<Hash:0x11397d5d8>

В первом примере я отправляю сообщение parsed_response ro с использованием точечной нотации. Работает нормально. Во втором я пытаюсь вызвать его, используя функцию ActiveSupport try(), и это (на удивление) вызывает исключение NoMethodError.

Не должен ли try () вернуть nil в этом случае? И почему он не находит метод "parsed_response", если я могу вызвать его с помощью точечной нотации, как показано в первом примере?

Заранее спасибо!

1 ответ

Решение

Понятия не имею как, но похоже ro объект был "передан" в хеш, который был отправлен parsed_response метод.
В Rails 2.3@ruby 1.8 неопределенный метод для объекта вызывает исключение.

Кроме того, документы остаются только для вызова try на объекте nil и ничего об объекте, у которого нет определенного метода:

Однако, в отличие от этого метода, исключение NoMethodError не будет вызываться, и вместо него будет возвращено значение nil, если принимающий объект является объектом nil или NilClass.

Другие вопросы по тегам