Можно ли вызвать метод instance_method модуля? - PullRequest
3 голосов
/ 11 августа 2010

Это строго теоретически.

module BleeTest
  def meth
    puts 'foo'
  end
end

Этот код выполняется без ошибок, но возможно ли вызвать метод "meth"?

Мне кажется, что "meth" - это метод экземпляра модуля, который не может быть создан. Но тогда почему эта конструкция допускается интерпретатором?

1 Ответ

7 голосов
/ 11 августа 2010

Да, конечно.Вы можете смешать BleeTest в объекте:

o = Object.new
o.extend BleeTest

o.meth
# foo

Или вы можете смешать BleeTest в классе:

class C
  include BleeTest
end

o = C.new

o.meth
# foo

Фактически, первая форма также может быть выражена вусловия второй формы:

o = Object.new

class << o
  include BleeTest
end

o.meth
# foo

То, что есть , в конце концов, целая точка модулей в Ruby: служить в качестве миксинов для составления объектови классы.

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