Новый элемент массива продолжает заменять старый

#ruby #arrays #hash

#ruby #массивы #хэш

Вопрос:

Я пытаюсь составить список учащихся с их средним баллом, используя массив и хэш. Я также использую gets.chomp для ввода этого массива пользователем, чтобы учитель мог добавлять в эту программу. Проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я добавляю нового ученика, он заменяет старый. Что я делаю не так?

 loop do
  @students = []
  puts "What is the student's name?"    
  @name = gets.chomp 
  puts "What is the students GPA?"
  @gpa = gets.chomp.to_f 

  def add_students 
    @students << {:name => @name, :gpa => @gpa}      
  end 

  add_students
  puts @students 
end
 

Комментарии:

1. Невозможно воспроизвести. В нем есть синтаксическая ошибка.

Ответ №1:

Вы неправильно диагностировали свою проблему. Дело не в том, что каждое добавление заменяет последнее… Вы сбрасываетесь @students в пустой массив в начале каждой итерации вашего цикла.

Итак, да, @students всегда будет только самый последний добавленный ученик, потому что ваш цикл создает пустой массив, добавляет в него ученика, печатает его, затем выбрасывает и создает новый пустой массив.

Это…

 loop do
@students = []
 

Должно быть так…

 @students = []
loop do
 

… так что ваш @students массив создается один раз, вне цикла.