我怎样才能让这个方法返回这个参数?

时间:2015-12-04 03:25:44

标签: ruby

我需要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 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

每次添加学生时,都会重新初始化public class MyClass { public int myInt; public MyClass( int i) { myInt = i; } } void Start () { MyClass myclass = new MyClass(1); MyClass myOtherClass = //Should be equal to myClass BUT I want to use the string "myClass" to reference it. } roster[grade],这会丢弃之前添加的所有学生。要解决此问题,您可能会更改:

[]

 roster[grade] = []

这行代码执行以下工作:如果 roster[grade] ||= [] roster[grade],则会将[]初始化为roster[grade]