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.