什么是最佳做法?使用try
还是使用rescue
?
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
使用这些方法有什么区别吗?
Answers:
尝试和救援有不同的目的。的目的try
是使您不必执行以下操作:
if user && user.email
或父对象可能为nil的任何情况,这会在NilClass上导致NoMethodError。的目的rescue
是处理方法调用引发的异常。如果您期望调用会引发异常user.email
,则可以rescue nil
防止该异常冒泡。
通常,rescue nil
除非您明确知道要救援的异常,否则请避免使用,因为您可能正在救援其他异常,并且永远不会知道,因为这rescue nil
会阻止您看到它。至少您可以记录一下:
begin
...some code...
rescue => ex
logger.error ex.message
end
ActiveSuppot#try
。
没有什么东西 是三弟梅斯一个很好的谈话,有助于理解为什么@AdamByrtek是现货,为什么我们都应该标志着失败的案例在一个更聪明,更面向对象的方式,x ? y : nil