什么是最佳做法?要使用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/

10-09 15:14