如何在Ruby中初始化对象数组

时间:2014-03-13 13:11:17

标签: ruby

任何人都可以告诉我如何在Ruby中初始化一个对象数组。我有班级专栏:

class Line
  @@text
  @@number = 0
  @@file = 0
  @@paired

  def initialize(text, number, file = 0, paired = 1)
    @@text = text
    @@number = number
    @@file = file
    @@paired = paired
  end
end

现在我希望初始化一个行数组,当我这样做 parsedLines = Array.new()并且在 loop do parsedLines[i] = Line.new(line, number, file, 0) 我有一个数组的行,但是数组元素在最后创建的Line对象上初始化,我该如何解决这个问题,得到Line对象的数组呢?

1 个答案:

答案 0 :(得分:2)

这就是@@的作用。它定义了一个类级变量,由类的所有实例共享。每次声明一个新实例时,都会覆盖这些值,所以当然整个数组看起来都包含相同的对象。

@@方法中将@更改为initialize,并完全删除类级@@变量,它们没有用处。您不需要在Ruby中以这种方式声明变量。

正确的实施方式是:

class Line
  def initialize(text, number = 0, file = 0, paired = 1)
    @text = text
    @number = number
    @file = file
    @paired = paired
  end
end