哈希不包含“尝试”方法
-
09-12-2019 - |
题
我注意到 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
这是Hash
和try
将返回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+(据我所知)。
不隶属于 StackOverflow