Dav*_*ser 3 ruby ruby-on-rails 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```
Run Code Online (Sandbox Code Playgroud)
但是,从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
Run Code Online (Sandbox Code Playgroud)
这让我感到惊讶,因为我的印象try是在Object中定义的,它是Hash的祖先,并且try将返回nil而不是抛出NoMethodError.
我错过了什么?
Jör*_*tag 12
这让我吃惊,因为我是那个的印象
try被定义在Object它是一个祖先Hash,并try会返回nil而不是抛出一个的NoMethodError.我错过了什么?
您对哪个类 try定义的印象是正确的(Object).你缺少的是它定义的文件.它在ActiveSupport库中定义,而不是在Ruby核心库中定义.
所以,你需要
require 'active_support/core_ext/object/try'
Run Code Online (Sandbox Code Playgroud)
第一.