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)
为什么这不起作用,我该怎么做?
要将数组元素用作单个参数,您必须使用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。
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |