Heredando métodos de clase de módulos / mixins en Ruby

Se sabe que en Ruby, los métodos de clase se heredan:

class P
  def self.mm; puts 'abc' end
end
class Q < P; end
Q.mm # works

Sin embargo, me sorprende que no funcione con mixins:

module M
  def self.mm; puts 'mixin' end
end
class N; include M end
M.mm # works
N.mm # does not work!

Sé que el método #extend puede hacer esto:

module X; def mm; puts 'extender' end end
Y = Class.new.extend X
X.mm # works

Pero estoy escribiendo una mezcla (o, más bien, me gustaría escribir) que contiene métodos de clase y métodos de instancia:

module Common
  def self.class_method; puts "class method here" end
  def instance_method; puts "instance method here" end
end

Ahora lo que me gustaría hacer es esto:

class A; include Common
  # custom part for A
end
class B; include Common
  # custom part for B
end

Quiero que A, B herede los métodos de instancia y de clase deCommon módulo. Pero, por supuesto, eso no funciona. Entonces, ¿no hay una manera secreta de hacer que esta herencia funcione desde un solo módulo?

Me parece poco elegante dividir esto en dos módulos diferentes, uno para incluir y otro para extender. Otra posible solución sería utilizar una clase.Common En lugar de un módulo. Pero esto es sólo una solución. (¿Qué pasa si hay dos conjuntos de funcionalidades comunesCommon1 yCommon2 ¿Y realmente necesitamos tener mixins?) ¿Hay alguna razón profunda por la que la herencia del método de clase no funcione con los mixins?

Respuestas a la pregunta(4)

Su respuesta a la pregunta