tl; dr: Es gibt keine Klassenmethoden und Modulmethoden in Ruby, nur Instanzmethoden. Wenn man bedenkt, dass sie beide nur Instanzmethoden sind und somit dasselbe, kann es keinen Unterschied geben.
In Ruby gibt es keine "Klassenmethode" oder "Modulmethode". Ruby hat genau eine Art von Methode: Instanzmethoden.
Wir verwenden manchmal das Wort „Klassenmethode“ oder „Modul-Methode“ aus Bequemlichkeit, wenn man über ein bestimmtes Muster von mit Instanzmethoden zu sprechen, aber es gibt kein solches Konzept in Ruby. "Klassenmethoden" und "Modulmethoden" sind wirklich nur Singleton-Methoden eines Objekts, das zufällig eine Instanz der Klasse Module
oder Class
ist. Es gibt absolut keinen Unterschied überhaupt zwischen einer Singleton-Methode eines Objekts, das eine Instanz von Class
werden passiert, Module
, String
, Array
, Hash
, Object
, Foo
, Bar
, Whatever
oder Garbledigookidoo
.
Oh. Habe ich erwähnt? Singleton-Methoden existieren ebenfalls nicht. Wieder ist es ein Wort, das wir für bestimmte Arten von Methoden verwenden, aber sie sind wirklich nur langweilig langweilig alte Instanz Methoden der Singleton Klasse eines Objekts.
jedoch „Instanzmethode der Singletonklasse von foo
“ und „Instanzmethode der Singletonklasse von Foo
, wo Foo
ist eine Instanz Class
“ sind wirklich lang, und so verkürzen wir sie „Singleton-Methode von foo
"und" Klasse Methode Foo
"aus Bequemlichkeit, zu wissen voller Brunnen, dass diese Fiktionen sind, die tatsächlich nicht in der Sprache existieren.
Im Gegensatz zu Java, das drei verschiedene Arten von Methoden hat (Instanzmethoden, statische Methoden und Konstruktoren (die quasi sortähnlich sind), hat Ruby genau eine Methode: Instanzmethoden. Keine Klassenmethoden, keine Modulmethoden, keine globalen Methoden, keine Top-Level-Methoden, keine statischen Methoden, keine Konstruktoren. Es hat jedoch, haben jedoch drei Arten von Klassen: reguläre Klassen, Singleton-Klassen und Include-Klassen (die letzteren Klassen werden synthetisiert und in die Vererbungshierarchie injiziert, wenn Sie include
oder prepend
aufrufen). Diese Klassen unterscheiden sich hauptsächlich darin, ob Methoden wie Object#class
, Class#superclass
und Class#ancestors
diese anzeigen oder unterdrücken. Singleton-Klassen werden von allen unterdrückt, enthalten Klassen der ersten beiden, werden aber von ancestors
angezeigt.
Mögliches Duplikat von http://stackoverflow.com/questions/151505/difference-between-a-class-and-a-module –