Ich bin neu in Ruby. Ich kenne mehrere andere Sprachen. Meine Frage bezieht sich auf das Aufrufen von Methoden außer Betrieb. Zum Beispiel:
%Vor%Wie kann ich meine Funktion2 aufrufen, bevor sie deklariert wird? Bei mehreren Sprachen können Sie es oben oder in einer .h-Datei deklarieren. Wie geht Ruby damit um?
Muss ich immer folgen:
%Vor% Hauptsächlich stört mich das, wenn ich eine andere Methode innerhalb von def initialize
für eine Klasse aufrufen muss.
Sie können eine Methode nicht aufrufen, bevor Sie sie definiert haben. Das bedeutet jedoch nicht, dass Sie myfunction
nicht vor myfunction2
definieren können! Ruby hat eine späte Bindung, daher wird der Aufruf von myfunction2
in myfunction
nicht mit dem tatsächlichen myfunction2
verknüpft, bevor Sie myfunction
aufrufen. Das heißt, solange der erste Aufruf von myfunction
nach myfunction2
erfolgt ist , sollten Sie in Ordnung sein.
Also, das ist ok:
%Vor%und das ist nicht:
%Vor%Die einzige Methode, bei der die Reihenfolge wichtig ist, ist rein prozeduraler Code, der bei zwei Methoden meist kurzsichtig ist:
%Vor% Dies würde funktionieren, wenn Sie greet
nicht verwenden wollten, bevor random_greeting
definiert wurde. Die Methode, die alle nicht-trivialen Codes lösen, besteht darin, das Verhalten in eine Klasse zu packen:
Man kann dann seine Gäste mit Doorman.new.greet
begrüßen, indem man das Verhalten in eine Klasse einbindet, um die Anwendung besser modellieren zu können (vielleicht geben andere Objekte in Ihrem Hotel -Code andere Grüße aus) und Außerdem wird der Namensraum main
sauber gehalten.
Für das Objekt main
in Ruby sind bereits 114 Methoden definiert. Daher ist es viel besser, eigene Methoden in Klassen einzufügen, die Akteure oder Objekte in Ihrem Projektmodell darstellen.
Abgesehen von dem, was Sie in der Frage zu bei der Initialisierung einer Klasse gesagt haben , ist dies vollständig möglich:
%Vor% Obwohl die Methode random_greeting
nicht definiert ist, wenn wir initailize
schreiben, wird die gesamte Klasse definiert, bevor initialize
überhaupt aufgerufen wird. Durch das Umschließen von Klassen wird das Leben einfacher, sauberer und bedeutet, dass die Dinge gekapselt .
Ruby ist eine interpretierte Sprache, daher hängt es nicht von der Reihenfolge der Funktionen ab, zB:
%Vor%Auch wenn zum Beispiel Funktionsaufrufe nicht existierende Funktion sind, wird die Laufzeitausnahme nur dann aufgerufen, wenn diese Funktion aufgerufen wird, d. e.:
%Vor% Wie Sie sehen, habe ich die Funktion foo
deklariert, die die nicht existierende Funktion blubry_starego_marycha
aufruft und Ruby ist in Ordnung, sie löst nur eine Ausnahme aus, wenn ich foo
aufruft.
Tags und Links ruby