当类动态变化时如何实例化Ruby类的实例?

时间:2015-12-16 02:21:50

标签: ruby

所以我试图在ruby中创建一个文本游戏,我试图创建一个可以处理创建任何对象的fight方法。我在另一个文件中有一个Monsters类,以及RogueVampire等子类。我已经设法通过使用case语句来实现此工作,该语句实例化mRogue的名为Vampire的对象,并且几乎将所有方法放在{ {1}}类,以便它们共享相同的方法名称,但是有更有效的方法来处理未知对象吗?

我的代码:

Monsters

链接到完整的回购:https://github.com/chaseWilliams/textGame

1 个答案:

答案 0 :(得分:0)

您可以使用const_get

class_name = "Rogue"

rogue_class = Object.const_get(class_name) # => Rogue

my_rogue = rogue_class.new # => #<Rogue ...>

在您的示例中,这看起来像:

def fight(name_of_monster_to_fight)
  monster_class = Object.const_get(name_of_monster_to_fight)
  m = monster_class.new

  # ... more code

rescue NameError # This is the error thrown when the class doesn't exist
  puts "error 503"
end