Instanziierung und Initialisierungsmethode

01

von 02

Instanziierung und Initialisierungsmethode

Ruby on Rails lernen: Mit irb spielen
brnzwngs / Flikr / CC BY 2.0

Wenn Sie eine Klasse in Ruby definieren, weist Ruby dem ein neues Klassenobjekt zu Klassennamenkonstante. Zum Beispiel, wenn Sie sagen würden Klasse Person; EndeDies entspricht in etwa Person = Class.new. Dieses Klassenobjekt ist vom Typ Klasseund enthält eine Reihe von Methoden, die zum Erstellen von Instanzen von Kopien dieser Instanzen nützlich sind.

02

von 02

Instanzen machen

Um eine neue Instanz einer Klasse zu erstellen, rufen Sie diese Klasse auf Neu Methode. Standardmäßig wird der erforderliche Speicher für die Klasse zugewiesen und ein Verweis auf das neue Objekt zurückgegeben. Wenn Sie also eine neue Instanz von erstellen würden Person Klasse, würden Sie anrufen Person.new.

Während dies zunächst etwas rückwärts erscheint, gibt es keine Neu Schlüsselwort in Ruby oder einer speziellen Syntax. Neue Objekte werden mit einer normalen Methode erstellt, die alles in allem relativ einfache Dinge tut.

Instanzen initialisieren

instagram viewer

Ein leeres Objekt ist nicht sehr aufregend. Um Ihr Objekt verwenden zu können, muss es zuerst initialisiert werden (vorausgesetzt, es hat eines Instanzvariablen das muss initialisiert werden). Dies erfolgt über die initialisieren Methode. Ruby übergibt alle Argumente, an die Sie übergeben SomeClass.new auf zu initialisieren auf dem neuen Objekt. Sie können dann normale Variablenzuweisungen und Methoden verwenden, um den Status des Objekts zu initialisieren. In diesem Beispiel a Person Klasse wird vorgestellt, deren initialisieren Die Methode verwendet ein Argument für Name und Alter und weist sie Instanzvariablen zu.

Klasse Person def initialize (Name, Alter) @name, @age = Name, Alter Ende Ende bob = Person.new ('Bob', 34)

Sie können diese Gelegenheit auch nutzen, um Ressourcen zu erwerben, die Sie möglicherweise benötigen. Offenes Netzwerk Steckdosen, öffnen Sie Dateien, lesen Sie alle benötigten Daten ein usw. Die einzige Einschränkung ist, dass die Leute im Allgemeinen nicht damit rechnen initialisieren Methoden zum Scheitern. Stellen Sie sicher, dass Sie eventuelle Fehler dokumentieren initialisieren Methoden gründlich.

Objekte zerstören

Im Allgemeinen zerstören Sie keine Objekte in Ruby. Wenn Sie aus C ++ oder einer anderen Sprache ohne Garbage Collector kommen, scheint dies seltsam. Aber in Ruby (und den meisten anderen von Müll gesammelten Sprachen) zerstören Sie keine Objekte, sondern hören einfach auf, darauf zu verweisen. Beim nächsten Speicherbereinigungszyklus wird jedes Objekt ohne Bezug darauf automatisch zerstört. Es gibt einige Fehler mit Zirkelverweisen, aber im Allgemeinen funktioniert dies einwandfrei und Sie benötigen nicht einmal einen "Destruktor".

Wenn Sie sich über Ressourcen wundern, machen Sie sich darüber keine Sorgen. Wenn das Objekt, das die Ressource enthält, zerstört wird, wird die Ressource freigegeben. Offene Dateien und Netzwerkverbindungen werden geschlossen, Speicher freigegeben usw. Nur wenn Sie Ressourcen in einer C-Erweiterung zuweisen, müssen Sie sich wirklich um die Freigabe von Ressourcen kümmern. Es gibt jedoch keine Garantie, wann der Garbage Collector ausgeführt wird. Um die Zuweisung von Ressourcen in a rechtzeitig Versuchen Sie auf diese Weise, sie manuell freizugeben.

Kopien von Objekten erstellen

Ruby wird als Referenz übergeben. Wenn Sie einen Verweis auf ein Objekt an a übergeben MethodeWenn diese Methode eine Methode aufruft, die den Status dieses Objekts ändert, können unbeabsichtigte Konsequenzen auftreten. Außerdem können Methoden den Verweis auf das Objekt speichern, um ihn zu einem viel späteren Zeitpunkt zu ändern, was zu einem verzögerten Effekt für den Fehler führt. Um dies zu vermeiden, bietet Ruby einige Methoden zum Duplizieren von Objekten.

Um ein Objekt zu duplizieren, rufen Sie einfach das auf some_object.dup Methode. Ein neues Objekt wird zugewiesen und alle Instanzvariablen des Objekts werden kopiert. Das Kopieren von Instanzvariablen sollte jedoch vermieden werden: Dies wird als "flache Kopie" bezeichnet. Wenn Wenn Sie eine Datei in einer Instanzvariablen halten würden, würden sich beide duplizierten Objekte jetzt auf dasselbe beziehen Datei.

Beachten Sie jedoch, dass es sich bei den Kopien um flache Kopien handelt, bevor Sie die verwenden dup Methode. Siehe den Artikel Erstellen von tiefen Kopien in Ruby für mehr Informationen.