【发布时间】:2013-03-13 21:26:44
【问题描述】:
我最近了解到,您可以在一行代码中使用rescue,以防该行出现问题(请参阅http://www.rubyinside.com/21-ruby-tricks-902.html 提示#21)。我有一些过去看起来像这样的代码:
if obj['key'] && obj['key']['key2'] && obj['key']['key2']['name']
name = obj['key']['key2']['name']
else
name = ''
end
使用rescue 方法,我相信我可以将代码改成这样:
name = obj['key']['key2']['name'] rescue ''
如果在访问哈希的任何级别引发 nil 异常,它应该被救援人员捕获并给我 '',这就是我想要的。如果这是所需的行为,我还可以选择将名称设置为 nil。
这样做有什么已知的危险吗?我问是因为这似乎好得令人难以置信。我有很多丑陋的代码,我很想摆脱它,看起来就像第一个代码示例。
【问题讨论】:
-
对于特定用途,内联
rescue是安全的。在方法调用结束时要非常小心使用它,否则可能会因为 I/O 错误或缺少数据库信息而引发异常。调试这些情况真的非常非常困难,而且会让你发疯。