Ruby Before-Loop: неопределенный метод `[]'для nil:NilClass (NoMethodError)
Примечание: я новичок в Ruby.
Вопрос: Как я могу получить print3 для распечатки массива, используя цикл до? Это может быть проще, чем я понимаю, но я потратил много часов, пытаясь решить ниже. Все, что я могу найти, это "простые" примеры до цикла.
У меня есть метод (print3), который мне нужно использовать до цикла. print3 извлекает массив из метода input_students. оба метода приведены ниже.
Я получаю следующее в IRB - directory.rb:30:in ``print3``: undefined method
[]for nil:NilClass (NoMethodError).
Строка 30 относится к
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
Мой код:
def input_students
puts "Please enter the names of the students"
puts "To finish, just hit return twice"
students = []
name = gets.chomp.downcase
while !name.empty? do
students << {name: name, cohort: :november}
puts "Now we have #{students.count} students"
name = gets.chomp.downcase
end
students
end
def print3(students)
i = 0
until i > students.length
puts "#{i+1} #{students[i][:name]} (#{students[i][:cohort]}
cohort)"
i += 1
end
end
Спасибо за любую помощь, которую вы можете предоставить.
1 ответ
Как сказал @Tom Lord, вы хотите, чтобы ваш цикл останавливался, когда i == students.length
Первый элемент массива - индекс 0, второй - индекс 1. Это означает, что ваш массив имеет длину 2, но в индексе 2 нет элемента, так как вы увеличиваете на 1, вы хотите остановить цикл там.