Как передать params как переменные внутри методов типа "dig" - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть ха sh как:

my_hash = {"one"=>{"two"=>{"three"=>"four"}}}

Я бы хотел сделать:

my_hash.dig("one", "two")
=> {"three"=>"four"}

Смешно каждый раз жестко кодировать параметры, и это очевидно, что использовать переменная типа:

my_var = "one", "two"

К сожалению, вывод совсем не велик:

my_hash.dig(my_var)
=> nil

Почему это не работает и как я правильно это делаю?

1 Ответ

5 голосов
/ 13 апреля 2020

Чтобы использовать элементы массива в качестве отдельных параметров, вам необходимо использовать оператор (*).

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.

...