我注意到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。
我错过了什么?
答案 0 :(得分:12)
这让我感到惊讶,因为我认为
try
在Object
中定义为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
的一部分。