我可以在ruby中使用变量名来代替对象名

时间:2018-02-16 17:41:14

标签: ruby

最近,我刚刚用Ruby写了一个简单的游戏。我需要用户输入我之前创建的对象名称。

当我在对象名称的位置给出变量名称时,ruby认为它是另一个字符串并输出

  

没有这样的方法(没有方法错误)

我该如何解决这个问题?

class game
  #somecode
  def weapon_power
    @power
  end
end

object = game.new
x = gets #user inputs object
puts x.weapon_power

3 个答案:

答案 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?