Ruby: ongedefinieerde methode `[]’ voor nil:NilClass bij een poging om Enumerator op een array van hashes te krijgen

Ik probeer een reeks hashes te herhalen. Wanneer ik het punt bereik waarop ik de Enumerator ophaal om te beginnen met herhalen, krijg ik de volgende foutmelding:

undefined method `[]' for nil:NilClass

Mijn code ziet er als volgt uit:

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']
    [...]

Ik heb in de foutopsporingsmodus gecontroleerd of het attributsParamsargument en de attributsvariabele niet nul of leeg zijn. Beide (omdat ze hetzelfde zijn!) bevatten 59 Hashes-objecten, maar ik kan nog steeds geen Enumerator op de array krijgen.

Waarom krijg ik deze foutmelding steeds?

Bedankt!


Antwoord 1, autoriteit 100%

undefined method `[]' for nil:NilClasszegt dat je something[index]hebt geprobeerd te doen, maar somethingis nil. Ruby laat je geen nilgebruiken als een array (d.w.z. roep de methode []erop aan).

Het probleem zit niet in de regel attributs.each, maar in de regel die volgt die de methode []op attributaanroept.

typeAttribut = attribut['objectTypeAttribute']

Dit geeft aan dat iets in attributsnul is. Dit kan gebeuren als attributsParameen lijst is die nul bevat, zoals zo.

attributsParam = [nil];
attributs = Array(attributsParam);
# [nil]
puts attributs.inspect

De eenvoudigste manier om fouten op te sporen, is door puts attributs.inspectnet voor de lus toe te voegen.

Overweeg ook of je de regel attributs = Array(attributsParam)echt nodig hebt of dat het al iets is Opsombaar.

Other episodes