我有一个像这样的哈希:
my_hash = {"one"=>{"two"=>{"three"=>"four"}}}
我想做:
my_hash.dig("one", "two")
=> {"three"=>"four"}
每次对参数进行硬编码都是荒谬的,并且很明显地使用像这样的变量:
my_var = "one", "two"
不幸的是,输出一点也不好:
my_hash.dig(my_var)
=> nil
为什么这不起作用,我该怎么做呢?
要使用数组元素作为单独的参数,您必须使用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
。