C'est un peu confus.Comment vérifier si le membre de hachage ruby existe récursivement?
Si vous avez un hachage qui contient plus de hachages qui ont également des hachages et ainsi de suite, comment déterminez-vous si un membre a plus d'un niveau de profondeur?
Par exemple:
hash 1 =
{
"layer1" =>
{
"layer2" =>
{
"layer3" => ['Something', 'Array']
}
}
}
Comment iriez-vous sur la vérification « quelque chose » existe dans le hachage ci-dessus si le hachage ne dispose que:
hash2 =
{
"layer1" =>
{
"layer2" => ['Other Array']
}
}
Par exemple, je voudrais essayer de faire:
if hash2['layer1']['layer2']['layer3'].contains? 'Something'
puts "Found Something!"
end
Mais cela erreur méthode non définie `contient? ' pour néant: NilClass. Où layer3 serait la NilClass parce qu'elle n'existe pas. Il suffirait que l'un de ces hashses incorporés soit nul alors disons qu'il n'existe pas, mais vous ne pouvez pas facilement tester leur existence car cela retournera aussi Nil si vous êtes un calque trop profond. Y at-il une fonction dans ruby qui vérifie chaque couche de niveau supérieur pour Nil récursivement au lieu du membre spécifique que vous demandez lorsque vous appelez .nil? E.g. Ce que je penserais fonctionnerait!
if hash2['layer1']['layer2']['layer3'].nil?
puts 'layer3 exists'
end
Mais .nil? seulement vérifie si 'layer3' existe. Y at-il une méthode qui commence à 'layer1' puis vérifie si 'layer2' existe, puis 'layer3' et ainsi de suite. Et à l'une des parties sont nuls, il renvoie faux? Parce que si 'layer2' ou 'layer1' n'existait pas, il commettrait une erreur en disant une méthode non définie `[] 'pour nil: NilClass.
https://stackoverflow.com/q/8301566/5101493 peut aider –