0

我有一个这样的 YAML 文件:

options:
    some_option: 'foo'

我将其作为 hash 加载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"]

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

4

2 回答 2

5

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

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

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

显然,如果“some_option”的有效值是假的,这将不能作为存在性检查。您需要明确使用has_key?

if yaml.has_key?("options") && yaml["options"].has_key?("some_option")
于 2013-01-30T05:25:06.950 回答
1
yaml["options"].include? "some_option"

如果可以"options"不设置:

(yaml["options"] || {}).include? "some_option"
于 2013-01-30T04:25:19.613 回答