Wie wird die Methodenreihenfolge in Ruby gehandhabt?

7

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.

    
codeblooded 21.05.2012, 07:15
quelle

4 Antworten

18

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%     
Idan Arye 21.05.2012, 07:27
quelle
7

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:

%Vor%

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 .     

Lee Hambley 21.05.2012 07:25
quelle
1

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.

    
Hauleth 21.05.2012 07:22
quelle
-1

Sie können die Methode in beliebiger Reihenfolge definieren, die Reihenfolge spielt keine Rolle.

    
xdazz 21.05.2012 07:17
quelle

Tags und Links