Ruby Before-Loop: неопределенный метод `[] 'для nil: NilClass (NoMethodError) - PullRequest
0 голосов
/ 08 ноября 2018

Примечание: я новичок в 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 Ответ

0 голосов
/ 08 ноября 2018

Как упоминал @Tom Lord, вы хотите, чтобы ваш цикл остановился, когда i == students.length

Первый элемент массива - индекс 0, второй - индекс 1. Это означает, что ваш массив имеет длину 2, но естьнет элемента с индексом 2, так как вы увеличиваете на 1, вы хотите остановить цикл там.

...