Globale Variablen in Ruby

Globale Variablen sind Variablen Auf diese kann unabhängig vom Umfang von überall im Programm zugegriffen werden. Sie werden mit einem $ (Dollarzeichen) gekennzeichnet. Die Verwendung globaler Variablen wird jedoch häufig als "un-Ruby" betrachtet, und Sie werden sie selten sehen.

Globale Variablen definieren

Globale Variablen werden wie jede andere Variable definiert und verwendet. Um sie zu definieren, weisen Sie ihnen einfach einen Wert zu und beginnen Sie, sie zu verwenden. Wie der Name schon sagt, hat die Zuweisung zu globalen Variablen von jedem Punkt im Programm aus globale Auswirkungen. Das folgende Programm demonstriert dies. Die Methode ändert eine globale Variable, und dies wirkt sich darauf aus, wie die zweite Methode läuft.


$ speed = 10. def beschleunigen. $ Geschwindigkeit = 100. Ende. def pass_speed_trap. wenn $ speed> 65. # Geben Sie dem Programm einen Strafzettel. Ende. Ende. beschleunigen. pass_speed_trap. 

Unpopulär

Warum ist das "un-Ruby" und warum sehen Sie globale Variablen nicht sehr oft? Einfach gesagt, bricht es die Kapselung. Wenn eine Klasse oder Methode den Status der globalen Variablen nach Belieben ohne Schnittstellenschicht ändern kann Andere Klassen oder Methoden, die auf dieser globalen Variablen basieren, können sich unerwartet und unerwünscht verhalten Weise. Darüber hinaus kann es sehr schwierig sein, solche Interaktionen zu debuggen. Was hat diese globale Variable wann geändert? Sie werden eine Menge Code durchsehen, um herauszufinden, was er getan hat, und das hätte vermieden werden können, wenn Sie nicht gegen die Kapselungsregeln verstoßen hätten.

instagram viewer

Das heißt aber nicht, dass es sich um globale Variablen handelt noch nie in Ruby verwendet. Es gibt eine Reihe spezieller globaler Variablen mit Einzelzeichennamen (a-la) Perl), die im gesamten Programm verwendet werden können. Sie stellen den Status des Programms selbst dar und ändern beispielsweise die Datensatz- und Feldtrennzeichen für alle bekommt Methoden.

Globale Variablen

  • $0 - Diese Variable, die mit $ 0 bezeichnet wird (das ist eine Null), enthält den Namen des Skripts der obersten Ebene, das ausgeführt wird. Mit anderen Worten, die Skriptdatei, die von der ausgeführt wurde Befehlszeile, nicht die Skriptdatei, die den aktuell ausgeführten Code enthält. Also, wenn script1.rb wurde von der Kommandozeile ausgeführt, würde es halten script1.rb. Wenn dieses Skript erfordert script2.rb, $ 0 in dieser Skriptdatei wäre auch script1.rb. Der Name $ 0 spiegelt die Namenskonvention wider, die in UNIX-Shell-Skripten für denselben Zweck verwendet wird.
  • $* - Die Befehlszeilenargumente in einem Array, das mit $ * (Dollarzeichen und Sternchen) gekennzeichnet ist. Zum Beispiel, wenn Sie laufen würden ./script.rb arg1 arg2, dann wäre $ * gleichbedeutend mit % w {arg1 arg2}. Dies entspricht dem Special ARGV Array und hat einen weniger aussagekräftigen Namen, so dass es selten verwendet wird.
  • $$ - Die Prozess-ID des Interpreters, angegeben mit $$ (zwei Dollarzeichen). Die Kenntnis der eigenen Prozess-ID ist häufig in Dämonprogrammen (die im Hintergrund ausgeführt werden und nicht an ein Terminal angeschlossen sind) oder Systemdiensten hilfreich. Dies wird jedoch etwas komplizierter, wenn Threads beteiligt sind. Seien Sie also vorsichtig, wenn Sie es blind verwenden.
  • $ / und $ \ - Dies sind die Trennzeichen für Eingabe- und Ausgabedatensätze. Wenn Sie Objekte mit lesen bekommt und drucken Sie sie mit setztverwendet diese, um zu wissen, wann ein vollständiger "Datensatz" gelesen wurde oder was zwischen mehreren Datensätzen gedruckt werden soll. Standardmäßig sollte dies das Zeilenumbruchzeichen sein. Da diese jedoch das Verhalten aller E / A-Objekte beeinflussen, werden sie, wenn überhaupt, nur selten verwendet. Sie können sie in kleineren Skripten sehen, in denen das Brechen der Kapselungsregeln kein Problem darstellt.
  • $? - Der Exit-Status des zuletzt ausgeführten untergeordneten Prozesses. Von allen hier aufgeführten Variablen ist dies wahrscheinlich die nützlichste. Der Grund dafür ist einfach: Sie können den Exit-Status von untergeordneten Prozessen nicht anhand ihres Rückgabewerts aus dem abrufen System Methode, nur wahr oder falsch. Wenn Sie den tatsächlichen Rückgabewert des untergeordneten Prozesses kennen müssen, müssen Sie diese spezielle globale Variable verwenden. Auch hier wird der Name dieser Variablen aus den UNIX-Shells übernommen.
  • $_ - Die letzte von gelesene Zeichenfolge bekommt. Diese Variable kann für diejenigen, die von Perl zu Ruby kommen, verwirrend sein. In Perl ist die $ _ Variable bedeutet etwas ähnliches, aber völlig anderes. In Perl, $_ Enthält den Wert der letzten Anweisung und in Ruby die vom vorherigen zurückgegebene Zeichenfolge bekommt Aufruf. Ihre Verwendung ist ähnlich, aber was sie wirklich halten, ist sehr unterschiedlich. Sie sehen diese Variable auch nicht oft (denken Sie daran, Sie sehen selten eine dieser Variablen), aber Sie können sie in sehr kurzen Ruby-Programmen sehen, die Text verarbeiten.

Kurz gesagt, Sie werden selten globale Variablen sehen. Sie sind oft eine schlechte Form (und "un-Ruby") und nur in sehr kleinen Skripten wirklich nützlich, in denen die volle Bedeutung ihrer Verwendung voll und ganz erkannt werden kann. Es gibt einige spezielle globale Variablen, die verwendet werden können, aber zum größten Teil werden sie nicht verwendet. Sie müssen nicht wirklich viel über globale Variablen wissen, um die meisten Ruby-Programme zu verstehen, aber Sie sollten zumindest wissen, dass sie vorhanden sind.

instagram story viewer