3

我尝试在 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 异常。

在这种情况下, try() 不应该返回 nil 吗?如果我可以使用点符号调用它,为什么它找不到“parsed_response”方法,如第一个示例中所示?

提前致谢!

4

1 回答 1

0

不知道如何,但似乎ro对象被“转移”到已发送 parsed_response方法的哈希中。
在 Rails 2.3@ruby 1.8中,对象的未定义方法引发异常

此外,文档仅用于在nil对象上调用 try 而没有关于没有特定方法的对象:

然而,与该方法不同的是,如果接收对象是 nil 对象或 NilClass,则不会引发 NoMethodError 异常,而是返回 nil。

于 2013-04-12T23:48:03.863 回答