【问题标题】:how do I call a method of an ruby object by giving a string as the method name如何通过将字符串作为方法名称来调用 ruby​​ 对象的方法
【发布时间】:2010-03-05 08:12:42
【问题描述】:

这是关于 Ruby 的。

我有一个 Box 对象,其属性包括“panel1”、“panel2”、...、“panel5”。 而不是调用 Box.panel1, Box.panel2, ... 我想像 Box.method_call("panel" + some_integer.to_s) 一样调用它。

我确定有这样的方法,但是正确的方法是什么?

你的, 乔恩。

【问题讨论】:

标签: ruby methods


【解决方案1】:

给定:

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'

希望对您有所帮助。

【讨论】:

  • 我只是稍微调整了一下以添加参数。很高兴我能帮上忙。
  • 使用 send 代替 eval 绝对是首选方式
【解决方案2】:

你快到了。您只需要将“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

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 2023-03-15
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多