これはちょっと混乱します。ruby hashメンバーが再帰的に存在するかどうかをチェックする方法は?
ハッシュなどがあるハッシュが多い場合は、複数のレイヤーが存在するメンバーが存在するかどうかをどのように判断しますか?あなたはハッシュだけ持っている場合は、上記のハッシュに「何か」が存在を確認しに行くかどう
hash 1 =
{
"layer1" =>
{
"layer2" =>
{
"layer3" => ['Something', 'Array']
}
}
}
:たとえば
hash2 =
{
"layer1" =>
{
"layer2" => ['Other Array']
}
}
、私がしようとするだろう。例えば
do:
if hash2['layer1']['layer2']['layer3'].contains? 'Something'
puts "Found Something!"
end
しかし、これはエラー未定義のメソッド `contains? 'なしの場合:NilClass。 layer3は存在しないため、NilClassになります。これらの埋め込まれたハッシュのうちの1つがNilであればそれが存在しないと言うだけで十分ですが、あなたが深すぎる層であればNilも返すので、それらの存在を簡単にテストできません。あなたが.nilを呼び出すときに要求する特定のメンバーの代わりに、Nilの各最上位層を再帰的にチェックする関数がルビにありますか? など。私は何がうまくいくと思いますか!
if hash2['layer1']['layer2']['layer3'].nil?
puts 'layer3 exists'
end
しかし.nil? は、 'layer3'が存在するかどうかをチェックします。 'layer1'で始まり、 'layer2'が存在し、 'layer3'などが存在するかどうかを調べるメソッドがありますか?そして、いずれの部分でもそれは偽であると返されません。 'layer2'または 'layer1'が存在しないと、定義されていないメソッド `[] 'がnil:NilClassに対してエラーとなります。
https://stackoverflow.com/q/8301566/5101493助けてもらう –