说我们有一个像这样的哈希:
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
。