在Ruby或Rails中,为什么有时在课堂上“包括”,有时候在课堂外?

我想

class ApplicationController < ActionController::Base include Foo 

是添加“mixin” – 以便将Foo模块中的所有方法都视为ApplicationController的方法。

但现在我看到了代码

 include Bar class ApplicationController < ActionController::Base include Foo 

那为什么它在ApplicationController之外呢? 这与将它放在ApplicationController的更常见用法有什么不同?

是的,在类中include Foo会将Foo添加到该类的祖先,从而使所有Foo的实例方法可用于这些类的实例。

在任何类定义之外include FooFoo添加到Object的祖先。 也就是说,就像你在Object类的定义中include Foo一样。 这样做的用途是所有Foo的实例方法现在都可用。