web-dev-qa-db-fra.com

Ruby: méthode non définie `[] 'pour nil: NilClass lors de la tentative d'obtenir Enumerator sur un tableau de hachages

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 attributsn'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!

5
Joe Toug

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 .

10
Schwern