如何在“dig”等方法中将参数作为变量传递

Ale*_*org 0 ruby parameters methods hash

我有一个像:

my_hash = {"one"=>{"two"=>{"three"=>"four"}}}
Run Code Online (Sandbox Code Playgroud)

我想做:

my_hash.dig("one", "two")
=> {"three"=>"four"}
Run Code Online (Sandbox Code Playgroud)

每次都对参数进行硬编码是很荒谬的,很明显使用如下变量:

my_var = "one", "two"
Run Code Online (Sandbox Code Playgroud)

不幸的是,输出根本不是很好:

my_hash.dig(my_var)
=> nil
Run Code Online (Sandbox Code Playgroud)

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

3li*_*t0r 5

要将数组元素用作单个参数,您必须使用splat 运算符( *)。

my_hash = {"one"=>{"two"=>{"three"=>"four"}}}
my_var = "one", "two" # same as: my_var = ["one", "two"]

my_hash.dig(*my_var)
#=> {"three"=>"four"}
Run Code Online (Sandbox Code Playgroud)
# 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"])
Run Code Online (Sandbox Code Playgroud)

您的版本输出的原因nil是因为对象(如数组)可以用作哈希键。您的版本正在寻找 .key["one", "two"]中不存在的密钥my_hash。从而返回默认值nil