我有一个班级:
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实例并在其他场景中访问它们。它们可能是根据不同的结果随机创建的,所以我不一定能够在父类中创建它们。
答案 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