当前位置:  开发笔记 > 编程语言 > 正文

Ruby救援和最佳实践语法

如何解决《Ruby救援和最佳实践语法》经验,为你挑选了2个好方法。

我有一些看起来类似于此的代码:

foo = SomeActiveRecordModel.where(bar: 10).first.foo rescue ''

一旦我开始使用Rubocop,就会在那里大吼大叫救援语法.所以我认为至少有两种方法可以编写这些代码:

foo = 
begin
  foo = SomeActiveRecordModel.where(bar: 10).first.foo
rescue NoMethodError
  ''
end

和:

foo = SomeActiveRecordModel.where(bar: 10).first
foo.present? ? foo.foo : ''

哪种方式更受欢迎,或者是否有其他首选方式?



1> Sergio Tulen..:

异常处理是为了处理异常情况.显然,有时可能没有记录.用捕获NoMethodError来处理它绝对是错误的方法.首先,它不仅会捕获"没有方法foo on nil:NilClass",而是所有其他"无方法"错误,这可能发生(错误在某处等).

因此,"记录未找到"是一种非特殊的情感,你必须按照某种条件处理它.

foo = SomeActiveRecordModel.where(bar: 10).first
return '' unless foo
foo.bar



2> Mori..:

通常的经验法则是,例外情况应该保留用于特殊情况,即那些在正常控制流程中没有预料到的情况.首先,它们通常比替代品慢.

这是我喜欢的场景:

foo = SomeActiveRecordModel.find_by_bar(10).try(:foo) || ''

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有