我为ActiveSupport :: Concern阅读了API。有ClassMethods
和InstanceMethods
,我们可以将类方法放在ClassMethods
中。
但是M
的主机可以使用M
中定义的方法,不是吗?为什么我不能写:
module M
def self.x
end
def y
end
end
而不是:
module M
module ClassMethods
def x
end
end
module InstanceMethods
def y
end
end
end
答案 0 :(得分:12)
您可能对Yehuda's take on this pattern感兴趣。我认为其中一些原因是历史性的,因为除非你手动通过include
和extend
自动执行Ruby会自动执行的操作,否则它们并不是真正需要的。
答案 1 :(得分:3)
依赖性得到照顾。请参阅提供的示例here。