我尝试在HttpParty :: Response的实例上使用ActiveSupport(2.3-stable)try()。我有一个非常奇怪的行为:
> 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异常。
在这种情况下,不应该尝试()返回nil吗?如果我可以使用点表示法调用它,为什么不找到“parsed_response”方法,如第一个例子中所示?
提前致谢!
答案 0 :(得分:0)
不知道如何,但似乎ro
对象被“转移”为已发送parsed_response
方法的哈希值。
在Rails 2.3@ruby 1.8 undefined method for object raises an exception。
此外,docs仅用于调用 nil 对象,而没有关于没有特定方法的对象:
与该方法不同,NoMethodError异常不会 如果接收对象是a,则将返回raise和nil 零对象或NilClass。