Wenn Klassen in Ruby geerbt werden, werden auch die Singleton-Klassen vererbt:
%Vor%Bei Modulen ist dies jedoch nicht der Fall:
%Vor%Um diese Einschränkung zu umgehen, greifen viele Leute auf diesen hässlichen Hack zurück:
%Vor%Ok, also meine Frage: Gibt es einen theoretischen / konzeptionellen Grund für diese Beschränkung auf Module? oder war es nur eine Umsetzungsschwierigkeit?
Nachdem ich den C-Quellcode (YARV / MRI) angeschaut habe, kann ich feststellen, dass es eine Schwierigkeit bei der Implementierung gibt (nicht unüberwindbar, aber trotzdem eine), aber ist dies der einzige Grund? Gibt es andere Gründe für diese Einschränkung?
Danke
Wenn niemand ein überzeugendes Argument vorbringen kann, glaube ich, dass die Beschränkung nur auf Schwierigkeiten bei der Implementierung zurückzuführen ist. Nichtsdestotrotz habe ich in den letzten Tagen an dem Problem gearbeitet und habe (in der Betaversion) eine neue Version von include namens include_complete
, die diese Schwierigkeiten umgeht und die Modulvererbung so wie Klassenvererbung (Singleton einbinden) ermöglicht / p>
Sehen Sie sich das Projekt hier an: Ссылка
Und Vorsicht, das Projekt ist immer noch sehr in der Betaversion, scheint aber immer noch wie gewünscht zu funktionieren
Achtung: Das Folgende ist nur Spekulation.
Wenn Sie eine Klasse verwenden, benötigen Sie Singleton-Klassenmethoden, da Sie sich darauf verlassen müssen, um das Objekt zu erstellen (zB MyClass.new
). Wenn Sie ein Modul verwenden, benötigen Sie sie nicht, da Sie keine Objekte rein von einem Modul erstellen können.
Tags und Links ruby inheritance singleton module mixins