此问题在此处已有答案:
Ruby Style: How to check whether a nested hash element exists(16个答案)
How to avoid NoMethodError for missing elements in nested hashes, without repeated nil checks?(16个答案)
六年前关闭了。
如果我试图访问一个不存在的hash元素,我得到NoMethodError: undefined method '[]' for nil:NilClass
,但是,我不能预测哪些元素会存在。
@param_info = {}
@param_info["drug"]["name"]
# => NoMethodError: undefined method `[]' for nil:NilClass
当一个元素意外地为nil
时,如何避免引发这个错误?
4条答案
按热度按时间xzabzqsa1#
Ruby 2.3.0在
Hash
和Array
上都引入了一个名为dig
的方法。如果在任何嵌套级别缺少元素,则返回
nil
。您的用例将如下所示:
dgiusagp2#
如果我正确理解了您的问题,即在属性值缺失的情况下进行宽容,那么您可以尝试以下操作:
这可能也会返回
nil
,但这将消 debugging 误undefined methods '[]' for nil:NilClass
更新日期:
为了处理不存在的密钥,您可以尝试以下操作。(Got this hint from Equivalent of try for a hash):
pu82cl6c3#
我会这样做:
您可以在单个函数中执行此操作:
样品:
xmq68pz94#
你可以简单地使用unless来测试它: