【发布时间】:2010-03-05 08:12:42
【问题描述】:
这是关于 Ruby 的。
我有一个 Box 对象,其属性包括“panel1”、“panel2”、...、“panel5”。 而不是调用 Box.panel1, Box.panel2, ... 我想像 Box.method_call("panel" + some_integer.to_s) 一样调用它。
我确定有这样的方法,但是正确的方法是什么?
你的, 乔恩。
【问题讨论】:
这是关于 Ruby 的。
我有一个 Box 对象,其属性包括“panel1”、“panel2”、...、“panel5”。 而不是调用 Box.panel1, Box.panel2, ... 我想像 Box.method_call("panel" + some_integer.to_s) 一样调用它。
我确定有这样的方法,但是正确的方法是什么?
你的, 乔恩。
【问题讨论】:
给定:
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'])
使用 send 可能更受欢迎:
Box.send 'foo'
Box.send 'bar', 'baz'
希望对您有所帮助。
【讨论】:
你快到了。您只需要将“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
【讨论】: