2015-12-04 54 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 
相關問題