动态调用对象

时间:2015-05-23 16:57:24

标签: ruby oop

class Person
    def sampleMethod
    end
end

jack = Person.new
input = gets.chomp

如何通过用户输入调用jack对象?我试过这个:

input = gets.downcase.chomp.to_sym

它调用方法而不是对象。

我也试过这个:

eval input + '.sampleMethod'

和此:

Kernel.const_get(input).sampleMethod

请帮忙。

2 个答案:

答案 0 :(得分:1)

我会将每个人存储在哈希中,哈希的键是该人可以被引用的名称。

class Person
  Registry = {}

  def sample_method
    puts 'hello, world'
  end
end

Person::Registry['jack'] = Person.new

name = 'jack'  # or you can use: name = gets.chomp    
person = Person::Registry.fetch(name)
person.sample_method

eval与用户输入一起使用是危险的,因为它会为用户提供各种方式,可能会意外或恶意地搞乱您的程序。我不会将eval作为解决这个相对简单问题的第一个工具。

答案 1 :(得分:0)

goto

您可以使用myloopTag: for (...; ...; ...) { // and you can break current loop by: break; // or specific (outer) loop by break myloopTag; // you can also use 'continue' to go to the start of the loop and increment again continue; // or to 'continue' at a label: continue myloopTag; } 来调用该对象。

class Person
    def sampleMethod
       puts "hello, world"
    end
end

jack = Person.new
input = "jack"

它们具有相同的对象ID,因此它们调用相同的对象。