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

bea*_*akr 0 ruby yaml hashtable

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

options:
    some_option: 'foo'
Run Code Online (Sandbox Code Playgroud)

我加载为哈希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"]
Run Code Online (Sandbox Code Playgroud)

有没有办法检索optionsYAML哈希中的子键?

Cad*_*ade 5

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

if yaml["options"] && yaml["options"]["some_option"]
Run Code Online (Sandbox Code Playgroud)

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

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

if yaml.has_key?("options") && yaml["options"].has_key?("some_option")
Run Code Online (Sandbox Code Playgroud)