如何在诸如“ dig”之类的方法中将参数作为变量传递

时间:2020-04-13 14:22:33

标签: ruby methods hash parameters

我的哈希像:

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

我想做:

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

每次对参数进行硬编码都是荒谬的,并且很显然使用像这样的变量:

my_var = "one", "two"

不幸的是,输出一点也不好:

my_hash.dig(my_var)
=> nil

为什么这不起作用,我该怎么做?

1 个答案:

答案 0 :(得分:5)

要将数组元素用作单独的参数,您必须使用splat operator*)。

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的原因是因为对象(如数组)可以用作哈希键。您的版本正在寻找密钥["one", "two"],该密钥不在my_hash中。因此返回默认值nil