J'essaie de faire une boucle sur un tableau de hachages. Lorsque j'atteins le point où je récupère l'énumérateur pour commencer la boucle, j'obtiens l'erreur suivante:
undefined method `[]' for nil:NilClass
Mon code ressemble à ceci:
def extraireAttributs (attributsParam)
classeTrouvee = false
scanTrouve = false
ownerOSTrouve = false
ownerAppTrouve = false
resultat = Hash.new(0)
attributs = Array(attributsParam)
attributs.each do |attribut| #CRASHES HERE!!!
typeAttribut = attribut['objectTypeAttribute']
[...]
J'ai vérifié en mode débogage pour m'assurer que l'argument attributsParams
et la variable attributs
n'est pas nul ou vide. Les deux (car ils sont identiques!) Contiennent 59 objets Hash, mais je ne parviens toujours pas à obtenir un énumérateur sur le tableau.
Pourquoi est-ce que je continue à recevoir cette erreur?
Merci!
undefined method `[]' for nil:NilClass
Indique que vous avez essayé de faire something[index]
Mais something
est nil
. Ruby ne vous permettra pas d'utiliser nil
comme tableau (c'est-à-dire d'appeler la méthode []
Dessus)).
Le problème n'est pas sur la ligne attributs.each
Mais sur la ligne suivante qui appelle la méthode []
Sur attribut
.
typeAttribut = attribut['objectTypeAttribute']
Cela indique que quelque chose dans attributs
est nul. Cela pourrait se produire si attributsParam
est une liste qui contient zéro comme ceci.
attributsParam = [nil];
attributs = Array(attributsParam);
# [nil]
puts attributs.inspect
Le moyen le plus simple de le déboguer consiste à ajouter puts attributs.inspect
Juste avant la boucle.
Considérez également si vous avez vraiment besoin de la ligne attributs = Array(attributsParam)
ou si c'est déjà quelque chose Enumerable .