Ruby Oneline救援

我最近了解到,如果该行发生错误,您可以使用一行代码进行救援(参见 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

有了救援方法,我相信我可以把这个代码改成如下:

name = obj['key']['key2']['name'] rescue ''

如果在访问哈希的任何级别都抛出一个零异常,它应该被抢救抓住,并给我“,这是我想要的.如果这是所需的行为,我也可以选择将名称设置为nil.

这样做有什么已知的危险吗?我问,因为这似乎太好了,不能成真.我有这么多丑陋的代码,我希望摆脱那看起来像第一个代码示例.

解决方法

阅读不错但它会打击你的表现.在我的经验中,触发时的救援速度要慢得多,而不是时,速度稍慢.在所有情况下,如果更快.要考虑的其他事情是,不应该期望异常,并且你有这样的代码.拥有一个如此深入嵌套的哈希可能是一个很好的气味,重构是nede

相关文章

以下代码导致我的问题: class Foo def initialize(n=0) @n = n end attr_accessor :n d...
这是我的spec文件,当为上下文添加测试“而不是可单独更新用户余额”时,我得到以下错误. require 's...
我有一个拦截器:DevelopmentMailInterceptor和一个启动拦截器的inititializer setup_mail.rb. 但我想将...
例如,如果我有YAML文件 en: questions: new: 'New Question' other: recent: ...
我听说在RSpec中避免它,let,let !,指定,之前和主题是最佳做法. 关于让,让!之前,如果不使用这些,我该如...
我在Rails中使用MongoDB和mongo_mapper gem,项目足够大.有什么办法可以将数据从Mongoid迁移到 Postgres...