Was ist die Verwendung in der Klasse/statische Methoden in ruby?
Lernen ruby und oop im Allgemeinen, und ich kam auf die Klasse Methoden, die soweit ich das verstanden habe sind wie Instanz-Methoden, aber der Zugriff von der Klasse sondern von einem Gegenstand und kann nur einmal gleichzeitig ausgeführt werden.
Aber ich verstehe nicht, warum Sie verwenden würden, eine Klasse Methode versuses eine normale Methode (außerhalb einer Klasse) und was auch Ihre Verwendung?
Beispiel:
#Why would you use:
class Foo
def self.bar
puts "Class method"
end
end
#Versus simply:
def bar
puts "Normal method"
end
Foo.bar # => Class method
bar # => Normal method
Da Sie beide zum gleichen Ergebnis führen?
Ich bin ziemlich verwirrt über Sie, also bitte korrigieren falls ich das Missverständnis alle/alles hier.
- Lesen Sie einige grundlegende OOP-Buch. Das wird helfen, mehr zu verstehen, diese grundlegenden Konzepte.
- Könnten Sie empfehlen (oder Kostenlose online-Freunden noch besser!)?
- Lernen grundlegende OOP-Konzept, ich schlage vor, Sie Lesen die o ' Reilly Serie Buch shop.oreilly.com/product/9780596008673.do und zu lernen, das gleiche mit ruby. Buch von ruby ist am besten sapphiresteel.com/ruby-programming/The-Book-Of-Ruby
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dein Beispiel ist nicht gut.
Klasse Methoden möglicherweise befassen sich mit der Verwaltung in allen Instanzen bestehen, dass von einer Klasse und Instanz-Methoden, um eine einzelne Instanz gleichzeitig.
In diesem Beispiel haben wir eine Klasse mit dem Namen
Book
. Es ist eine Methode der Klasseall_by_author
. Fragt es einige behaupten-Datenbank und gibt ein array vonBook
Instanzen. Die Instanz-Methodetitle
holt sich den Titel von einer einzigenBook
Instanz.Also die Methode der Klasse verwalten eine Sammlung von Instanzen, und die Instanz-Methode schafft es einfach, die Instanz.
In der Regel, wenn eine Methode operieren würde auf eine Gruppe von Instanzen, oder ist der code für die Klasse, aber nicht direkt Lesen oder aktualisieren einer einzelnen Instanz, dann muss es wohl sein sollte, eine Klasse Methode.
Genau wie du gesagt hast, Sie sind:
denken Sie auch daran, dass die Klasse tragbar ist
self.class
in Ihrem 'normalen' BereichDies ist mehr eine OOP-Frage als ein ruby ein. Klasse ruby-Methoden sind die gleichen wie in anderen OO-Programmiersprachen. Das bedeutet:
Hier ist ein besseres Beispiel:
Hier kannst du sehen, dass die class-Methode ist der Zugriff über eine Klasse, während die Instanz-Methode zugegriffen wird durch eine Instanz oder ein Objekt einer Klasse (
Foo.new
).Beispiel kopiert aus hier, wo finden Sie auch weitere Informationen zu diesem Thema.
Beachten Sie: obwohl jeder code kann eine Klasse oder eine Instanz-Methode, jeder hat seine eigenen use cases und eigenen pros und contras. In OOP Streben wir eine wiederverwendbare, flexible und lesbaren code, was bedeutet, dass wir in der Regel setzen will, die meisten der code so strukturiert ist als Instanz-Methoden in einem sinnvollen domain-Modell.
Das wichtigste ist, dass es hält Ihren code organisiert. Wenn Sie haben Hunderte von tausenden von code-Zeilen, dass Sie alle planlos werfen Sachen herum, die in dem gleichen Namensraum kann zu einem Alptraum werden. Organisation ist wirklich wichtig, und namespaces sind eine einfache Möglichkeit, um die Modularität, mit der Unterstützung der Sprache.
Etwas weniger wichtig ist, die Klasse/Modul Methoden teilen können Staat, ohne zu lecken es überall (z.B. Klassen können als Klassen-Instanz-Variablen), und Sie haben ein eigenes support-Methoden ermöglichen eine bessere factoring, während die globalen Methoden nicht effektiv gemacht werden private.
Haben Sie viele Missverständnisse,
In ruby können wir definieren die Klasse und die Instanz-Methode.
Klasse Methode wird verwendet, um zu tun Verarbeitung auf Klassen-Ebene, D. H. Daten, die sich nur auf Klassen-Ebene oder in Bezug auf alle Objekte. Zum Beispiel, um die Anzahl der Objekte gehört zu der Klasse müssen Sie die Klasse Methode. Wie
In der gleichen Weise zu Verfahren einzelne Objekt, das Sie brauchen, Objekt, Methode, Prozess-ein einzelnes Objekt, wie,
So, Klasse, Methode ist zum Beispiel singletone design-Muster, bei dem Objekt kann es eine eigene Implementierung der gleichen Methode.