哈希不包含'try'方法

时间:2012-03-08 17:00:18

标签: ruby-on-rails ruby ruby-1.8.7 rails-3.0.10

我注意到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。

我错过了什么?

2 个答案:

答案 0 :(得分:12)

  

这让我感到惊讶,因为我认为tryObject中定义为Hash的祖先,而try会返回nil投掷NoMethodError

     

我错过了什么?

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

所以,你需要

require 'active_support/core_ext/object/try'

第一

答案 1 :(得分:1)

try不是ruby 1.8.7的一部分,尽管Rails确实通过ActiveSupport包含它。 try是来自ruby 1.9+(afaik)的Object的一部分。