最近,我刚刚用Ruby写了一个简单的游戏。我需要用户输入我之前创建的对象名称。
当我在对象名称的位置给出变量名称时,ruby认为它是另一个字符串并输出
没有这样的方法(没有方法错误)
我该如何解决这个问题?
class game
#somecode
def weapon_power
@power
end
end
object = game.new
x = gets #user inputs object
puts x.weapon_power
答案 0 :(得分:1)
您将变量x
设置为gets
方法的返回值。此方法始终返回String
对象。
现在,在您的代码中,您试图在此weapon_power
对象上调用String
方法,该方法自然会失败,因为字符串没有这样的方法。
虽然我不确定你想要在这里实现什么,但是你可以在你的weapon_power
上调用object
方法:
object.weapon_power
最后请注意,在Ruby中,类名(如game
)总是必须以大写字母开头。因此必须拼写为Game
。确切地说。代码,您将收到SyntaxError
。
答案 1 :(得分:0)
我不是100%我找不到你想要的东西 - 看起来像使用用户输入来识别变量,对吗?
如果是这样,一个简单的方法就是通过哈希:
object = game.new
objects = { "object" => object }
x = gets #user inputs object
puts objects[x].weapon_power # retrieve object named "object" and call the weapon-power on it
好处是,如果需要,这将适用于哈希中的几个对象。
答案 2 :(得分:0)
我认为您正在询问如何通过字符串中的名称来实例化您的Game
对象。
x = gets
clazz = Object.const_get(x)
obj = clazz.new
如果课程已经实例化,你将不得不做更多的工作。也许是这样的
gameInstance = Game.new
x = gets
case x
when 'Game'
puts gameInstance.weapon_power
else
puts 'Unknown input'
end
可能重复:How do I create a class instance from a string name in ruby?