В Ruby или Rails, почему «include» иногда внутри класса, а иногда и вне класса? - PullRequest
12 голосов
/ 02 марта 2011

Я думал,

class ApplicationController < ActionController::Base
  include Foo

- это добавить «mixin», чтобы все методы в модуле Foo рассматривались как методы ApplicationController.

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

include Bar

class ApplicationController < ActionController::Base
  include Foo

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

1 Ответ

17 голосов
/ 02 марта 2011

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

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

...