论坛首页 编程语言技术论坛

Try() 和 Maybe Monad

浏览 6635 次
精华帖 (14) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-03-11  
嗯,在active_support的whiny_nil.rb里对nil.id进行改写的:
class NilClass
def id
    raise RuntimeError, "Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id", caller
  end
end

我上面又犯了错误,既然它是raise RuntimeError,那么 nil.id rescue nil就应该是正常返回nil而不应报任何warning/error信息。
我们在生产环境下却遇到了warning且返回4的情况,是因为rails并不是在初始化时直接加载whiny_nil.rb,而是
require('active_support/whiny_nil') if configuration.whiny_nils

development.rb和test.rb里都有:
config.whiny_nils = true

production.rb里没有配置,所以取:
def default_whiny_nils
        false
      end

造成开发、测试环境跑的好好的程序到生产环境出错,所以inline rescue还是不能用,即使开发环境是正确的。
0 请登录后投票
   发表时间:2008-03-12  
这个Maybe monad,好丑好丑
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics