我无法插入我的哈希值,因为显然它是 nil class?任何人都可以对此有所了解吗?

I can't interpolate my hash because apparently it is nil class? Could anyone shed some light on this?

是否有迭代的替代方法或我可以制定的条件允许我仅插入一个哈希的值?我已经检查了我的输入结果,显然当只有一个哈希值时,我保存哈希值的数组消失了。我还测试了结果,结果为零 class。

def print_with_index(students)

   students.each_with_index do |student, index|
      index_plus_one = index + 1  
   puts "#{index_plus_one}. #{students[:name]} (#{students[:cohort]} cohort)"

end
end

我该如何解决我的问题以及为什么哈希会这样?

完整代码:

def print_header
  puts "The students of Villains Academy"
  puts "--------------"
end

def print_footer(names)
  puts "Overall, we have #{names.count} great students"
end

def input_students
  puts "Please enter the names and then the cohort of the students"
  puts "To finish, just hit return twice"
    #created an empty array
  students = []
    #getting the first name
  name = gets.chomp
  cohort = gets.chomp.to_sym
   if cohort.empty?
    cohort = :november
   end

  if cohort !~ /january|february|march|april|may|june|july|august|september|october|november|december/
  puts "Please enter a valid month"
  puts "Warning months are case sensitive. Please enter in lowercase characters."
    cohort = gets.chomp.to_sym
  end

  while !name.empty? do
     # add the student hash to the array called students
  students << {name: name, cohort: cohort}
    if students.count > 1
       puts "Now we have #{students.count} students"
    else students.count == 1
       puts "Now we have #{students.count} student"
    end
       #getting another name from the user
    name = gets.chomp
    cohort = gets.chomp.to_sym

    if cohort.empty?
     cohort = :november
    end

    if cohort !~ /january|february|march|april|may|june|july|august|september|october|november|december/
    puts "Please enter a valid month"
    puts "Warning months are case sensitive. Please enter in lowercase characters."
    cohort = gets.chomp.to_sym
  end

 end

 bycohort = students.sort_by { |v| v[:cohort] }
  filter = students.select! { |student| student[:cohort] == :november }
 puts bycohort #This allows me to see all of my hashes before they are filtered
 puts ""

 bycohort
 filter
 end

def print_with_index(students)

students.each_with_index do |students, index|
  index_plus_one = index + 1 
  puts "#{index_plus_one}. #{students[:name]} (#{students[:cohort]} cohort)"

   end
  end

### body ###
students = input_students
print_header
print_with_index(students)
print_footer(students)

不过这对我有用,我认为使用 each_with_index 枚举,你必须传入一个哈希数组,即 [{...}, {...}, {...}] ,而不是具有多个键值的单个散列

def print_with_index(students)

  students.each_with_index do |students, index|
      index_plus_one = index + 1  
      puts "#{index_plus_one}. #{students[:name]} (#{students[:cohort]} cohort)"
  end
end

print_with_index([{name:"b", cohort: "c"}]) 
# 1. b (c cohort)

您应该使用 student 而不是 students 作为块参数。您可以检查学生对象是否为 nil.

def print_with_index(students)

  students.each_with_index do |student, index|
    if !student.nil?
      index_plus_one = index + 1  
      puts "#{index_plus_one}. #{student[:name]} (#{student[:cohort]}  cohort)"
    end
  end
end