как вызвать метод объекта ruby, указав строку в качестве имени метода - PullRequest
3 голосов
/ 05 марта 2010

это про Руби.

У меня есть объект Box с такими атрибутами, как «панель1», «панель2», ..., «панель5». Вместо вызова Box.panel1, Box.panel2, ... Я хочу назвать его как Box.method_call ("панель" + some_integer.to_s).

Я уверен, что есть такой способ, но как правильно?

С уважением, Йорн.

Ответы [ 2 ]

5 голосов
/ 05 марта 2010

Ты почти у цели. Вам просто нужно заменить «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
5 голосов
/ 05 марта 2010

Дано:

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'

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...