我注意到 Ruby 1.8.7 中的哈希对象和 Rails 3.0.10 中的哈希对象之间存在差异。

例如,1.8.7内 irb, ,我得到:

1.8.7 :001 > {}.try(:method)
NoMethodError: undefned method `try' for {}:Hash
from (irb):1```

但是,从 3.0.10 Rails 控制台,我得到:

1.8.7 :003 > {}.try(:method_x)
NoMethodError: undefined method `method_x' for {}:Hash
  from (irb):3:in `try'
  from (irb):3

这让我感到惊讶,因为我的印象是 try 是在 Object 中定义的,它是 Hash 的祖先,并且 try 将返回 nil 而不是抛出 NoMethodError。

我缺少什么?

有帮助吗?

解决方案

这让我感到惊讶,因为我的印象是 try 定义于 Object 这是 Hashtry 将返回 nil 而不是扔一个 NoMethodError.

我缺少什么?

你对其中的印象 班级 try 中的定义是正确的(Object)。你所缺少的是 文件 它定义在.它是在 ActiveSupport 库中定义的,而不是在 Ruby 核心库中定义的。

所以,你需要

require 'active_support/core_ext/object/try'

第一的。

其他提示

try 不是 ruby​​ 1.8.7 的一部分,尽管 Rails 确实通过以下方式包含了它 ActiveSupport. try 是其一部分 Object 来自 ruby​​ 1.9+(据我所知)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top