首页 > 解决方案 > 哈希方法获取红宝石

问题描述

我需要获取一些哈希值,但是,我不知道该怎么做!我的数据:

data = {
          name: "Pedro Álvares",
          age: 35,
          sensitive_data: {
            cpf_cnpj=>27046645678, 
            fantasy_name: "I have the power"
            }
        }

我搜索 ruby​​ 方法并找到方法values_at,但此方法仅获取 first_data ,例如name、age。如果我使用:

name = data.values_at(:name)

返回的字段是Pedro Álvares 但如果我尝试使用:

fantasy_name = data.values_at(:fantasy_name)

返回的数据为nil

如何在不使用data[:sensitive_data][:fantasy_name]的情况下获取该字段?

标签: ruby

解决方案


因为您知道哈希的正确结构,所以您应该编写:

data[:sensitive_data][:fantasy_name]
  #=> "I have the power"

你不应该dig在这里使用。为什么?假设你不小心写了

data.dig(:sesnitive_data, :fantasy_name)

将返回nil(因为data没有 key :sesnitive)。根据上下文,错误可能要到稍后才会出现,从而使调试变得比必要的更加困难。

相比之下,如果你写

data[:sesnitive_data][:fantasy_name]

data[:sesnitive_data]会返回nil(因为data没有 key :sesnitive_data)然后nil[:sesnitive_data]会引发异常,通知你nil没有方法[]。这正是您希望发生的事情:您希望立即收到错误通知,并查明错误原因,以便您可以轻松更正代码。

Hash#digArray#digStruct#dig(它们相互调用)有它们的用途(当您事先不知道对象的结构时——例如,哈希的键),但在以下情况下不应该使用这些方法对象的结构是已知的。


推荐阅读