Warum schließt die Einfügung von Ruby-Modulen die Singleton-Klasse des Moduls aus?

9

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

    
horseyguy 03.10.2010, 04:08
quelle

2 Antworten

1

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

    
horseyguy 04.10.2010 03:53
quelle
0

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.

    
Andrew Grimm 03.10.2010 10:09
quelle