我有一个像这样的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
的子密钥?
答案 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"