是否有可能在'dig'之类的方法中将参数作为变量传递?

问题描述 投票:0回答:1

说我们有一个像这样的哈希:

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

我想做:

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

太好了!但是,每次都对参数进行硬编码是荒谬的。恕我直言,很明显使用像:

这样的变量
my_var = "one", "two"

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

my_hash.dig(my_var)
=> nil

[请帮助我了解为什么它不起作用以及如何正确处理?

ruby methods hash parameters
1个回答
3
投票

要使用数组元素作为单独的参数,您必须使用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

© www.soinside.com 2019 - 2024. All rights reserved.