如何通过给出一个字符串作为方法名称来调用ruby对象的方法

时间:2010-03-05 08:12:43

标签: ruby methods

这是关于Ruby的。

我有一个Box对象,其中包含“panel1”,“panel2”,......,“panel5”等属性。 而不是调用Box.panel1,Box.panel2,...我想把它称为Box.method_call(“panel”+ some_integer.to_s)。

我确定有这样的方式,但是怎么回事?

此致, Joern。

2 个答案:

答案 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