【问题标题】:Rails 3.2 Obj.try() failingRails 3.2 Obj.try() 失败
【发布时间】:2012-05-02 21:31:39
【问题描述】:

我刚刚从 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 框架。好像很难准确搜索到try的方法,所以我在网上还没有找到。还有人看到这个吗?谢谢!

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-3.2


【解决方案1】:

Object#try 应该处理 nil 接收器。不应使用它来避免NoMethodError 异常。

您在 3.1.0 中看到的行为是一个错误和it was "fixed" 7 months ago(在撰写本文时)。

【讨论】:

  • 非常感谢!我只是潜入源代码,发现自己也参与了你链接的那个提交。假设保持在 Rails 更新之上是值得的,那么就会更快地赶上这个。
猜你喜欢
  • 1970-01-01
  • 2012-05-02
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 2019-07-24
  • 2016-04-25
  • 1970-01-01
  • 2016-04-16
相关资源
最近更新 更多