首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >最佳实践:尝试vs救援

最佳实践:尝试vs救援
EN

Stack Overflow用户
提问于 2011-05-20 02:39:54
回答 3查看 57.4K关注 0票数 73

什么是最佳实践?使用tryrescue

代码语言:javascript
复制
user.try(:email)

VS

代码语言:javascript
复制
user.email rescue nil

代码语言:javascript
复制
post.try(:comments).try(:first).try(:author)

VS

代码语言:javascript
复制
post.comments.first.author rescue nil

使用这些有什么不同吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-20 02:49:07

尝试和营救有不同的目的。try的目的是让您不必执行以下操作:

代码语言:javascript
复制
if user && user.email

或者父对象可能为空的任何情况,这将导致NilClass上的NoMethodError。rescue的目的是处理方法调用抛出的异常。如果您期望调用user.email时出现异常,那么您可以对其执行rescue nil操作,以防止异常冒泡。

一般来说,我会说避免使用rescue nil,除非你清楚地知道你在拯救什么异常,因为你可能会拯救一个不同的异常,而你永远不会知道这一点,因为rescue nil会阻止你看到它。至少你可以把它记下来:

代码语言:javascript
复制
begin
  ...some code...
rescue => ex
  logger.error ex.message
end
票数 112
EN

Stack Overflow用户

发布于 2011-05-20 02:46:30

两者看起来都很可疑,并且可以掩盖其他错误。你确定你真的想在那里得到零吗?也许首先检查是否有任何评论,并显式地覆盖空案例会更好?

票数 7
EN

Stack Overflow用户

发布于 2015-08-12 15:15:00

Nothing is Something是Sandi Metz的精彩演讲,有助于理解为什么@AdamByrtek是正确的,以及为什么我们都应该用一种比x ? y : nil更智能、更面向对象的方式来标记失败的案例

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6063347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档