我一直在寻找这个问题的答案一段时间,但我一直无法找到一个我能够理解和应用的答案。
我有一个包含三个实例变量的类:@brand
、@setup
和@year
. 我有一个包含在该类中的模块,它具有三个方法:print_brand()
、print_setup()
和print_year()
简单地打印分配给关联变量的值。
我想从用户那里获取两个字符串,并使用第一个作为对象名称,第二个作为方法名称。这是我现在拥有的:
class Bike
include(Printers)
def initialize(name, options = {})
@name = name
@brand = options[:brand]
@setup = options[:setup]
@year = options[:year]
end
end
trance = Bike.new("trance x3", {
:brand => "giant",
:setup => "full sus",
:year => 2011
}
)
giro = Bike.new("giro", {
:brand => "bianchi",
:setup => "road",
:year => 2006
}
)
b2 = Bike.new("b2", {
:brand => "felt",
:setup => "tri",
:year => 2009
}
)
puts "Which bike do you want information on?"
b = gets()
b.chomp!
puts "What information are you looking for?"
i = gets()
i.chomp!
b.send(i)
我缺少一些b
从字符串转换为对象名称的功能。例如,我希望用户能够输入“trance”,然后输入“print_year”并在屏幕上打印“2011”。我尝试使用constantize
on b
,但这似乎不起作用。我得到错误:
in 'const_defined?': wrong constant name trance (NameError)
还有其他想法吗?