2015-12-04 57 views
-1

我需要有add_student添加多个学生到阵列grade。该方法应该将多个学生添加到数组中,并将它们分配给grade或散列中的键。我怎样才能得到这个方法返回这个参数?

class School 
    def initialize(name) 
    @name = name 
    end 

    def roster 
    @roster ||= {} 
    end 

    def add_student(student, grade) 
    roster[grade] = [] 
    roster[grade] << student 
    end 

    def student_grade(grade) 
    return students 
    end 
end 

我不明白为什么add_student不会添加多个参数。我得到一个错误,它只返回一个参数或nil

回答

2

每次添加学生时,都会将您的roster[grade]重新初始化为[],这会丢弃所有以前添加的学生。为了解决这个问题,你可能会改变:

roster[grade] = [] 

roster[grade] ||= [] 

这行代码就以下工作:它初始化roster[grade][]如果roster[grade]nil

3

Vutran的答案正确地确定了问题,但更好的解决方案是使用默认proc自动初始化散列中的任何缺失值。

class School 
    attr_reader :roster 

    def initialize(name) 
    @name = name 
    @roster = Hash.new {|h,k| h[k] = [] } 
    end 

    def add_student(student, grade) 
    roster[grade] << student 
    end 

    # ... 
end 
相关问题