参考基于用户输入的变量

时间:2012-12-18 18:44:26

标签: ruby user-input

使用以下代码,我希望用户输入"pluto""scooby",并调用该实例的speak()方法。

class Dog
  def speak()
    puts "Woof"
  end
end

scooby = Dog.new
pluto = Dog.new

puts "Which dog would you like to speak? [scooby/pluto]"
response = gets.chomp
response.speak()   

如果您能告诉我如何做到这一点,和/或该怎么称呼它,那将是非常棒的。

2 个答案:

答案 0 :(得分:0)

大多数Ruby程序员会建议您不要尝试按名称查找全局变量,而是将您的狗存储在按名称索引的Hash中。

所以你应该:

kennel = {}
kennel['scooby'] = Dog.new    
kennel['pluto'] = Dog.new

然后你可以说

kennel[response].speak

当然,你可能想要防止response不是犬舍中狗的名字的价值;我会把这个研究留给你。 :)

答案 1 :(得分:0)

您可以eval用户的输入来获取局部变量的值:

eval(response).speak()  

但是,这不安全。

另外一项检查是:

eval(response).speak() if local_variables.include?(response.to_sym)

但它也不安全。