Desde a versão 2.3, o Ruby possui o método dig
. O método acessa os valores aninhados dentro de Hashes e de Arrays, chamando novamente o método dig
a cada passo da sequência de argumentos passados a ele. Veja o exemplo a seguir:
user = { name: "Leon", address: { work: "Alameda Santos, 1293",
home: "Alameda Tietê, 333" },
phone: ["9999-9999", "8888-8888"] }
user.dig(:address, :work)
#=> "Alameda Santos, 1293"
user.dig(:phone, 1)
#=> "8888-8888"
user.dig(:phone, 2)
#=> nil
Uma funcionalidade interessante do dig
é que ele retorna nil
caso o valor ou chave não seja encontrado. Isso ajuda a lidar com o problema de hashes voláteis ou com valores desconhecidos, afinal ele nos dá a oportunidade de tratar o retorno nulo em vez de levantar o erro de execução.