我刚从Rails 3.1.0升级到3.2.3。一旦我清除了我的gem依赖问题,我设法运行测试,我发现了这个:
1.9.2p180 :005 > Rails.version
=> "3.2.3"
1.9.2p180 :006 > a = 'test'
=> "test"
1.9.2p180 :007 > a.try(:banana)
NoMethodError: undefined method `banana' for "test":String
from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/activesupport-3.2.3/lib /active_support/core_ext/object/try.rb:32:in `try'
from (irb):7
from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails /commands/console.rb:47:in `start'
from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails/commands/console.rb:8:in `start'
from /Users/jamesthullbery/.rvm/gems/ruby-1.9.2-p180@app_tier/gems/railties-3.2.3/lib/rails/commands.rb:41:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
1.9.2p180 :008 >
当我在Rails 3.1.0上执行相同的命令时,我没有遇到任何问题:
1.9.2p180 :004 > Rails.version
=> "3.1.0"
1.9.2p180 :005 > a = 'test'
=> "test"
1.9.2p180 :006 > a.try(:banana)
=> nil
1.9.2p180 :007 >
有没有人见过这个问题?当然我的环境有问题,而不是Rails框架。准确搜索方法尝试似乎相当困难,所以我还没有在网上找到任何东西。还有其他人看到这个吗?谢谢!
答案 0 :(得分:3)
Object#try
应该处理零接收器。它不应该用于避免NoMethodError
例外。
您在3.1.0中看到的行为是一个错误,it was "fixed" 7 months ago(截至撰写本文时)。