Отправить метод экземпляра в модуль - PullRequest
3 голосов
/ 18 апреля 2010

Учитывая следующий модуль,

module Foo
  def bar
    :baz
  end
end

def send_to_foo(method)
  # ...?
end

send_to_foo(:bar) # => :baz

Какой код должен войти в send_to_foo, чтобы последняя строка работала как положено? (send_to_foo явно не так, как я бы это реализовал; это просто проясняет то, что я ищу)

Сначала я ожидал, что Foo.send(:bar) будет работать, но есть смысл, что это не так. Это было бы, если бы метод был определен как def self.bar, но это не весело.

1 Ответ

2 голосов
/ 18 апреля 2010

ну, простой способ будет

Foo.extend Foo # let Foo use the methods it contains as instance methods
def send_to_foo(method)
  Foo.send(method)
end

Так что теперь

irb> send_to_foo(:bar)
 #=> :baz
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...