Я пытаюсь запустить .each на хэш. Однако иногда это ноль. Когда я проверю, что это ноль ... он говорит, что это не так. Затем я получаю следующее исключение:Хеш не поймает, если он равен нулю
undefined method `[]' for nil:NilClass
Вот мой код. Любая идея, почему она не работает?
if @abc[:def] != nil
@abc[:def].each do |ghi| <---- Fails Here
.
.
.
end
end
Любые идеи/предложения были бы замечательными.
Update:
@abc не равна нулю. Если я делаю Кладу из аЬса я получаю следующее:
puts "abc: #{@abc}"
abc: {:val1=>"123", :val2=>"234"}
puts "abc[:def]: #{@abc[:def]}"
abc[:def]: []
@abc создается с помощью YAML. Вот как он создается.
@abc = YAML.load(File.open(pathToYamlFile/yamlFile.yml))
'abc' не является массивом, это хэш. Есть большая разница в том, как к элементам обращаются, а методы не всегда ведут себя одинаково. Пожалуйста, покажите точный пример того, как определяется 'abc'. «Вопросы, связанные с проблемами с написанным кодом, должны описывать конкретную проблему и включать действительный код для ее воспроизведения - в самом вопросе. См. Http://SSCCE.org для руководства». –
'@abc [: def] is nil' будет напечатан, когда вы запустите это:' @abc = {: val1 => "123",: val2 => "234"}; если @abc [: def]! = nil; @abc [: def] .each do | ghi |; ставит ghi; конец; еще; puts "@abc [: def] is nil"; end'? (Вы можете, конечно, заменить каждый из моих полуколоний на новую строку.) Пожалуйста, покажите, как этот код изменен, чтобы дать ваш результат. Кстати, я предлагаю вам написать 'puts '@abc: # {@ abc}" # => abc: {: val1 => "123",: val2 => "234"} ', чтобы вы не отображали смешанные строки кода и выход. –
@theTinMan Это должно быть исправление. Извините за путаницу. –