Чтобы использовать элементы массива в качестве отдельных параметров, вам необходимо использовать оператор (*
).
my_hash = {"one"=>{"two"=>{"three"=>"four"}}}
my_var = "one", "two" # same as: my_var = ["one", "two"]
my_hash.dig(*my_var)
#=> {"three"=>"four"}
# The above could be read as:
my_hash.dig(*my_var)
my_hash.dig("one", "two")
# While your version can be read as:
my_hash.dig(my_var)
my_hash.dig(["one", "two"])
Причина, по которой ваша версия выводит nil
потому что объекты (например, массивы) могут использоваться как ключи sh. Ваша версия ищет ключ ["one", "two"]
, которого нет в my_hash
. Таким образом, возвращая значение по умолчанию nil
.