Подтвердить что ты не робот

В Ruby или Rails, почему "включить" иногда внутри класса, а иногда и вне класса?

Я думал, что

class ApplicationController < ActionController::Base
  include Foo

заключается в том, чтобы добавить "mixin" - чтобы все методы в модуле Foo рассматривались как методы ApplicationController.

Но теперь я вижу код

include Bar

class ApplicationController < ActionController::Base
  include Foo

Так почему же это за пределами ApplicationController? Чем это отличается от более распространенного использования помещения внутри ApplicationController?

4b9b3361

Ответ 1

Да, include Foo внутри класса добавляет Foo к предкам этого класса и, таким образом, делает все экземпляры экземпляра Foo доступными для экземпляров этого класса.

Вне определения любого класса include Foo добавит Foo к предкам Object. То есть это то же самое, что и include Foo внутри определения класса Object. Использование этого метода заключается в том, что все методы экземпляра Foo теперь доступны повсеместно.