什么是最佳实践?使用try
或rescue
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
VS
post.comments.first.author rescue nil
使用这些有什么不同吗?
发布于 2011-05-20 02:49:07
尝试和营救有不同的目的。try
的目的是让您不必执行以下操作:
if user && user.email
或者父对象可能为空的任何情况,这将导致NilClass上的NoMethodError。rescue
的目的是处理方法调用抛出的异常。如果您期望调用user.email
时出现异常,那么您可以对其执行rescue nil
操作,以防止异常冒泡。
一般来说,我会说避免使用rescue nil
,除非你清楚地知道你在拯救什么异常,因为你可能会拯救一个不同的异常,而你永远不会知道这一点,因为rescue nil
会阻止你看到它。至少你可以把它记下来:
begin
...some code...
rescue => ex
logger.error ex.message
end
发布于 2011-05-20 02:46:30
两者看起来都很可疑,并且可以掩盖其他错误。你确定你真的想在那里得到零吗?也许首先检查是否有任何评论,并显式地覆盖空案例会更好?
发布于 2015-08-12 15:15:00
Nothing is Something是Sandi Metz的精彩演讲,有助于理解为什么@AdamByrtek是正确的,以及为什么我们都应该用一种比x ? y : nil
更智能、更面向对象的方式来标记失败的案例
https://stackoverflow.com/questions/6063347
复制相似问题