我将rescue
用于所有事情,而不只是用于“抢救”例外。我的意思是,我只是喜欢它让我验证并仔细检查数据的方式。
例如,假设我有一个模型Item
可能有或没有User
。然后,当我想获得我写的项目的所有者名称时:
item.user.name rescue ""
而不是
item.user.nil? ? "" : item.user.name
它也是同样的想法,因为nil.name
触发了我用""
拯救的异常,但我不确定这是一个好习惯。它制作了我想要的东西,它用更少的代码制作它,但是......我不知道,所有rescue
字在这里和那里让我感到不安全。
这是一种不好的做法,还是有效滥用rescue
关键字?
答案 0 :(得分:7)
我认为你有点滥用救援,但在Rails中,有一种针对这些问题的具体方法:try
。 Documentation
在您的情况下,item.user.try(:name)
可能是更好的方法。
答案 1 :(得分:3)
我想说这并不是一个很好的习惯。我从来没有真正在Ruby中使用过这个功能,因为我觉得我只是隐藏了错误案例。值得注意的是,您正在拯救任何和所有异常,而不指定任何类型的预期错误。它总是看起来像是一些会使调试更难以进行调试的东西,尽管如我所说,我从来没有打扰过自己使用它。
答案 2 :(得分:1)
与大多数其他语言一样,自己进行检查会比使用救援更快。
答案 3 :(得分:1)
作为rescue
滥用行为的替代方案,请查看andand gem。它与try
发布的其他建议类似,但更好。并且让你说:
item.user.andand.name
如果nil
为item.user
,则表达式为nil
。