3

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

例如,在 1.8.7irb中,我得到:

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。

我错过了什么?

4

2 回答 2

12

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

我错过了什么?

您对定义哪个类 的印象try是正确的 ( Object)。您缺少的是它在哪个文件中定义。它是在 ActiveSupport 库中定义的,而不是在 Ruby 核心库中。

所以,你需要

require 'active_support/core_ext/object/try'

第一的。

于 2012-03-09T00:54:49.223 回答
1

try不是 ruby​​ 1.8.7 的一部分,尽管 Rails 确实通过ActiveSupport. tryObjectruby​​ 1.9+ (afaik) 的一部分。

于 2012-03-08T17:26:09.160 回答