Abstrakte Methode in Ruby
Wie kann ich die Kraft einer Unterklasse zu implementieren eine Methode in Ruby. Es scheint nicht zu sein, ein abstraktes Schlagwort in Ruby, das ist der Ansatz, den ich nehmen würde in Java. Gibt es eine andere mehr Ruby-wie durchsetzen, Abstrakt?
InformationsquelleAutor der Frage Hunter McMillen | 2011-07-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Abstrakte Methoden sollen weniger nützlich, in Ruby, weil es nicht
starkstaticly eingegeben.Dies ist jedoch, was ich tun:
Es selten zu sein scheint, aber notwendig.
InformationsquelleAutor der Antwort Andy
Ich mag die Antwort von pvandenberk, aber ich würde es verbessern, wie folgt:
Nun, wenn Sie machen eine Klasse gehörenden
Canine
"abstrakte Klasse" (dh. eine Klasse, die hatCanine
- Modul, in der seine Vorfahren), wird es sich beschweren, wenn es gefunden wird, dass#bark
Methode nicht implementiert ist:Beachten Sie, dass seit Ruby-Klassen sind nicht statisch, sondern immer offen für Veränderungen,
Dog
Klasse sich nicht durchsetzen kann Existenz#bark
Methoden, da Sie nicht wissen Wann es zu Ende sein sollen. Wenn Sie als Programmierer tun, es ist bis zu Ihnen, um es zu testen.InformationsquelleAutor der Antwort Boris Stitnicky
Meine bevorzugte Methode ist ähnlich, aber etwas anders... ich mag es lieber wie folgt vor, denn es macht den code auch selbst dokumentieren, was Ihnen etwas sehr ähnlich zu Smalltalk:
Einige Leute beschweren sich, dass diese weniger TROCKEN, und darauf bestehen, auf die Schaffung eines exception-Unterklasse und/oder die
"SubclassResponsibility"
string in eine Konstante, aber IMHO Sie können die Sachen trocknen bis zu dem Punkt des seins gerieben, und das ist in der Regel nicht eine gute Sache. E. g. wenn Sie mehrere abstrakte Klassen in Ihrem code-Basis, wo würden Sie Sie definieren dieMESS
string-Konstante?!?InformationsquelleAutor der Antwort pvandenberk
Ich mag die Verwendung von einem Edelstein wie abstract_method gibt eine dsl-rails-syntax abstrakte Methoden:
InformationsquelleAutor der Antwort Rob Dawson
Dieser code wird nicht lassen Sie die Klasse laden, wenn die Methoden 'foo', 'bar' und 'Kumpel' ist nicht definiert in der geerbten Klasse.
Nicht berücksichtigt wurden Klassen definiert, die über viele Dateien, aber lasst uns ehrlich viele von uns eigentlich definieren Klasse Methoden über viele Dateien? Ich meine, wenn du nicht zählen, mix-ins. (dies gilt Konto für)
InformationsquelleAutor der Antwort baash05
Wenn Sie wollen, dass ein Fehler geworfen, wenn Sie erstellen eine Instanz der Klasse können Sie das folgende tun
InformationsquelleAutor der Antwort Samuel Garratt