在子类中实例化一个类并在另一个子类中访问其实例

时间:2016-04-03 11:25:32

标签: ruby

我有一个班级:

class Player
  def initialize(name, npc=true)
    @name = name
    @npc  = npc
  end
end

以及父类和一些子类:

class Scene
end

class Intro < Scene
  joe = Player.new("Joe", false)
end

class NeighboursHouse < Scene
end

我在Player中创建了Intro的新实例,我也需要在NeighboursHouse中访问该实例。有没有办法在不重复每个子类的情况下执行此操作?

为了澄清,我希望能够在每个场景中创建新的Player实例并在其他场景中访问它们。它们可能是根据不同的结果随机创建的,所以我不一定能够在父类中创建它们。

3 个答案:

答案 0 :(得分:1)

这听起来像程序设计问题。如果我是你,我宁愿让班级Player来管理玩家,让Scene s“邀请”玩家,无论何时需要玩家。

class Player
  @players = {}

  def self.[](name, npc=true)
    @players[name] ||= new(name, npc)
  end

  def initialize(name, npc=true)
    @name = name
    @npc  = npc
  end
end

当你需要一个玩家时,例如Intro

class Intro < Scene
  joe = Player["Joe", false]
end

通过这种方式,您无需担心创建重复的播放器。

唯一的挫折是,不能有2个同名的玩家,但一个是npc而另一个不是。

答案 1 :(得分:0)

问题不明确,但我想您可以在Scene中创建实例,并从子类中引用它。

class Scene
  @@joe = Player.new("Joe", false)
end

class Intro < Scene
  @@joe # => refers to the object
end

class NeighboursHouse < Scene
  @@joe # => refers to the same object
end

答案 2 :(得分:-1)

如果问题是如何在每次继承类时运行一些代码片段(但每次继承只运行一次),那么您正在寻找inherited

class Scene
  def self.inherited(subclass)
    super
    joe = Player.new("Joe", false)
  end
end