什么是最佳实践? 使用 try还是使用 rescue?
try
rescue
user.try(:email)
VS
user.email rescue nil
post.try(:comments).try(:first).try(:author)
post.comments.first.author rescue nil
使用这些有什么区别吗?
两者看起来都很可疑,可以掩盖其他虫子。你确定你真的想一无所获吗?也许最好先检查是否有注释,然后明确地覆盖空格?
尝试和拯救有不同的目的。 try的目的是让你不必去做:
if user && user.email
或者父对象可能为 nil 的任何情况,这将在 NilClass 上导致 NoMethodError。rescue的用途是处理由方法调用引发的异常。如果您期望在调用 user.email时发生异常,那么可以通过 rescue nil防止异常冒出来。
user.email
rescue nil
一般来说,我认为应该避免使用 rescue nil,除非您明确地知道正在拯救的异常是什么,因为您可能正在拯救另一个异常,而且您永远不会知道它,因为 rescue nil会阻止您看到它。至少你可以把它记录下来:
begin ...some code... rescue => ex logger.error ex.message end
没有什么是什么是 Sandi Metz 的一个出色的演讲,它帮助我们理解为什么@AdamByrtek 是正确的,为什么我们都应该用一种更聪明、更面向对象的方式来标记失败的案例