如何将参数作为变量传递给“ 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个回答
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

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