处理Ruby中的许多[...]

アレッ*_*ックス 0 ruby json

在纯ruby脚本中我有这个:

result = JSON.parse result.body_str
count = result && result["ke1"] && result["ke1"]["key2"] && result["ke1"]["key2"]["key3"] && result["ke1"]["key2"]["key3"]["key4"] ? 
        result["key1"]["key2"]["key3"]["key4"].to_i : 
        123
Run Code Online (Sandbox Code Playgroud)

有什么方法可以简化这个吗?

DGM*_*DGM 6

count = result["key1"]["key2"]["key3"]["key4"].to_i rescue 123
Run Code Online (Sandbox Code Playgroud)

如果你想制作一个更好的可读性的私有方法,你可以做到

def count(result)
  result["key1"]["key2"]["key3"]["key4"].to_i 
rescue NoMethodError
  123
end
Run Code Online (Sandbox Code Playgroud)

我添加NoMethodError来限制救援可以吞下的错误.尽管有关使用流量控制异常的争论,但我更喜欢这种方法以提高可读性.在一个小功能或一个衬管中,它在技术上甚至不会改变流量,因为它们都保留在一个位置.

如果在具有数百万条记录的紧密循环中使用它,您可能希望使用分析器与其他解决方案进行比较,但您必须根据实际使用情况进行调用.如果在一些可能每天运行5次的代码上使用它,请坚持使用更容易阅读和维护的代码.