在初始化

时间:2015-11-09 12:44:06

标签: ruby oop

假设我有2个班级

Class Obj1
  def initialize(object)
  end
end

Class Obj2
  def initialize(object)
  end
end

我想初始化Obj1和Obj2并将Obj1的实例传递给Obj2的实例,反之亦然。所以,像这样的东西

ob1 = Obj1.new(ob2)
ob2 = Obj2.new(ob1)

我怎样才能实现这种功能?我虽然关于使用attr_accessor并在它们都被初始化之后传递,但这似乎是一个坏主意,因为它使API复杂化。

为什么我要这样做: 这是时间表的包装。 Obj1(Stops)是一个停止列表(Stop),Obj2(Lines)是一个行列表(Line)。 Stop有多个Line对象,因此Stop要求停止特定行。我想故意实现这种循环。我希望能够得到这样的东西:

Stops.first.stop.first.lines.first.stops(依此类推)

整个项目都是一个练习。

1 个答案:

答案 0 :(得分:2)

嗯,他们无法在完全相同的时间互相创造。因此必须首先创建一个,然后用于配置另一个。这需要attr_accessor或类似。

例如:

class Stop
  def add_line(line)
    line.add_stop(self)
    lines << line
  end

  def lines
    @lines ||= []
  end
end