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」の有効な値が false の場合、これは存在チェックとして機能しません。明示的に使用する必要があります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 に答える