Ruby 直到循环:nil:NilClass 的未定义方法“[]”(NoMethodError)

Ruby Until-Loop: undefined method `[]' for nil:NilClass (NoMethodError)

注意:我是Ruby的新手。

问题:如何使用 until 循环让 print3 打印出数组? 这可能比我意识到的更简单,但我花了好几个小时试图解决以下问题。我能找到的只有 'simple' until loop examples.

我有一个方法 (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

感谢您提供的任何帮助。

正如@Tom Lord 提到的,您希望循环在 i == students.length

时停止

数组的第一个元素是索引 0,第二个元素是索引 1。这意味着您的数组长度为 2,但索引 2 处没有元素,因为您要递增 1,所以您想停止循环那里。