В Ruby или Rails, почему "включить" иногда внутри класса, а иногда и вне класса?
Я думал, что
class ApplicationController < ActionController::Base
include Foo
заключается в том, чтобы добавить "mixin" - чтобы все методы в модуле Foo рассматривались как методы ApplicationController.
Но теперь я вижу код
include Bar
class ApplicationController < ActionController::Base
include Foo
Так почему же это за пределами ApplicationController
? Чем это отличается от более распространенного использования помещения внутри ApplicationController
?
Ответы
Ответ 1
Да, include Foo
внутри класса добавляет Foo
к предкам этого класса и, таким образом, делает все экземпляры экземпляра Foo
доступными для экземпляров этого класса.
Вне определения любого класса include Foo
добавит Foo
к предкам Object
. То есть это то же самое, что и include Foo
внутри определения класса Object
. Использование этого метода заключается в том, что все методы экземпляра Foo
теперь доступны повсеместно.