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