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 attributsParams
argument en de attributs
variabele 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:NilClass
zegt dat je something[index]
hebt geprobeerd te doen, maar something
is nil
. Ruby laat je geen nil
gebruiken 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 attribut
aanroept.
typeAttribut = attribut['objectTypeAttribute']
Dit geeft aan dat iets in attributs
nul is. Dit kan gebeuren als attributsParam
een 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.inspect
net 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.