Зачем нам нужны методы ClassMethods и InstanceMethods?

Я прочитал API для ActiveSupport:: Concern. Есть 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

Ответы

Ответ 1

Вам может быть интересно Иегуда возьмет этот шаблон. Я думаю, что причина для некоторых из них исторична, поскольку они действительно не нужны, если вы вручную не делаете то, что Ruby будет делать автоматически через include и extend.

Ответ 2

Занимаются заботы. См. Приведенный ниже пример здесь.