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

我可以在ruby中使用变量名代替对象名吗,ruby,Ruby,最近,我用Ruby写了一个简单的游戏。我需要用户输入我之前创建的对象的名称 当我用变量名代替对象名时,ruby认为它是另一个字符串,并输出该字符串 没有这种方法(没有方法错误) 我怎样才能解决这个问题 class game #somecode def weapon_power @power end end object = game.new x = gets #user inputs object puts x.weapon_power 我不是100%不理解你想要的-看起

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

当我用变量名代替对象名时,ruby认为它是另一个字符串,并输出该字符串

没有这种方法(没有方法错误)

我怎样才能解决这个问题

class game
  #somecode
  def weapon_power
    @power
  end
end

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

我不是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

好处是,如果需要的话,这可以处理散列中的多个对象。

我不是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

好处是,如果需要,这可以处理散列中的多个对象。

可以将变量
x
设置为方法的返回值。此方法始终返回
字符串
对象

现在,在您的代码中,您正试图在这个
String
对象上调用
wearm\u power
方法,该方法自然会失败,因为字符串没有这样的方法

我不确定你首先想要实现什么,但是你可以在你的
对象上调用
武器力量
方法,如下所示:

object.weapon_power

最后,请注意,在Ruby中,类名(就像你的
game
总是必须以大写字母开头。因此,它必须改为拼写
game
。使用你的确切代码,你会收到一个
SyntaxError

你将变量
x
设置为方法的返回值。这个方法总是返回一个
字符串
对象

现在,在您的代码中,您正试图在这个
String
对象上调用
wearm\u power
方法,该方法自然会失败,因为字符串没有这样的方法

我不确定你首先想要实现什么,但是你可以在你的
对象上调用
武器力量
方法,如下所示:

object.weapon_power

最后,请注意,在Ruby中,类名(就像你的
游戏
总是必须以大写字母开头。因此,它必须拼写为
游戏
。如果使用确切的代码,你会收到一个
语法错误

我想你是在问如何通过字符串中的
游戏
对象的名称来实例化它

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

可能重复:

我想你是在问如何通过字符串中的名称实例化你的
游戏
对象

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
可能的副本: