什么是最佳做法?要使用try
还是使用rescue
?
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
使用这些方法有什么区别吗?
最佳答案
尝试和救援有不同的目的。 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
关于ruby-on-rails - 最佳实践:尝试与救援,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6063347/