找出密钥中是否存在子密钥

时间:2013-01-30 02:57:28

标签: ruby hashtable yaml

我有一个像这样的YAML文件:

options:
    some_option: 'foo'

我加载为哈希yaml,我希望能够使用include?来获取一个布尔值来判断是否存在密钥。

要获取options的子密钥,我通常会使用yaml["options"]["some_option"],但是如何判断YAML哈希是否包含["options"]["some_option"]?你做不了类似的事情:

if yaml.include? "options"["some_option"] # or
if yaml.include? ["options"]["some_option"] # or even
if yaml.include? yaml["options"]["some_option"]

有没有办法在YAML哈希中检索options的子密钥?

2 个答案:

答案 0 :(得分:5)

根据yaml文件中的预期值,您可以使用Ruby的类型转换:

if yaml["options"] && yaml["options"]["some_option"]

如果yaml["options"]不存在,则会返回nil,这会使if语句短路并返回false

显然,如果“some_option”的有效值为false,则无法作为存在检查。您需要明确使用has_key?

if yaml.has_key?("options") && yaml["options"].has_key?("some_option")

答案 1 :(得分:1)

yaml["options"].include? "some_option"

如果"options"可能未设置:

(yaml["options"] || {}).include? "some_option"