Dziedziczenie metod klas z modułów / miksów w Ruby

Wiadomo, że w Ruby metody klasowe są dziedziczone:

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

Jednak zaskakuje mnie, że nie działa z miksami:

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

Wiem, że metoda #extend może to zrobić:

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

Ale piszę mixin (lub raczej chciałbym pisać) zawierający zarówno metody instancji, jak i metody klas:

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

Teraz chciałbym to zrobić:

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

Chcę, aby A, B dziedziczyły zarówno metody instancji, jak i klasyCommon moduł. Ale to oczywiście nie działa. Czy więc nie istnieje tajny sposób na sprawienie, aby dziedziczenie działało z jednego modułu?

Wydaje mi się nieistotne, aby podzielić to na dwa różne moduły, jeden do włączenia, drugi do rozszerzenia. Innym możliwym rozwiązaniem byłoby użycie klasyCommon zamiast modułu. Ale to tylko obejście. (Co jeśli istnieją dwa zestawy wspólnych funkcjiCommon1 iCommon2 i naprawdę musimy mieć miksy?) Czy istnieje jakiś głęboki powód, dla którego dziedziczenie metod klasowych nie działa z miksów?

questionAnswers(4)

yourAnswerToTheQuestion