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

Joe*_*ann 3 ruby methods

它是关于Ruby的.

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

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

你的,乔恩.

boj*_*ojo 5

鉴于:

class Box
   def self.foo
      puts "foo called"
   end
   def self.bar(baz)
      puts "bar called with %s" % baz
   end
end
Run Code Online (Sandbox Code Playgroud)

你可以使用eval:

eval("Box.%s" % 'foo')
eval("Box.%s('%s')" % ['bar', 'baz'])
Run Code Online (Sandbox Code Playgroud)

使用send可能更喜欢:

Box.send 'foo'
Box.send 'bar', 'baz'
Run Code Online (Sandbox Code Playgroud)

希望有所帮助.


Mik*_*use 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
Run Code Online (Sandbox Code Playgroud)