这是关于Ruby的。
我有一个Box对象,其中包含“panel1”,“panel2”,......,“panel5”等属性。 而不是调用Box.panel1,Box.panel2,...我想把它称为Box.method_call(“panel”+ some_integer.to_s)。
我确定有这样的方式,但是怎么回事?
此致, Joern。
答案 0 :(得分:5)
假设:
class Box
def self.foo
puts "foo called"
end
def self.bar(baz)
puts "bar called with %s" % baz
end
end
您可以使用 eval :
eval("Box.%s" % 'foo')
eval("Box.%s('%s')" % ['bar', 'baz'])
使用发送可能更受欢迎:
Box.send 'foo'
Box.send 'bar', 'baz'
希望有所帮助。
答案 1 :(得分:5)
你快到了。您只需要将“method_call”替换为“send”,这就是在Ruby中实际调用方法的方式 - 将消息发送给对象。
class Box
def panel1
puts 1
end
def panel2
puts 2
end
end
box = Box.new #=> #<Box:0x2e10634>
box.send("panel1")
1
panel = 2
box.send("panel#{panel}")
2