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


我想

class ApplicationController < ActionController::Base
  include Foo

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

但现在我看到了代码

include Bar

class ApplicationController < ActionController::Base
  include Foo

那么为什么它在外面呢? ApplicationController?这与将其置于其中的更常见用途有何不同 ApplicationController


12514
2018-03-01 22:56


起源

include Bar 像这是一个有害的错误 - 它会改变 ApplicationController 您希望它的方式,但也改变应用程序中的每个其他对象。 - Andrew Grimm


答案:


是, include Foo 在课堂内添加 Foo 到那个班的祖先,从而使所有的 Foo这些类的实例可用的实例方法。

在任何类定义之外 include Foo 将添加 Foo 到了祖先 Object。即就像你做的一样 include Foo 里面的定义 Object 类。这样做的用途就是全部 Foo现在各处都可以使用实例方法。


15
2018-03-01 23:02