Warum hat Ruby globale Variablen wie $$
überhaupt?
Konnte nicht ein ähnliches Verhalten erreicht werden, indem Accessoren und Attribute in Kernel
definiert wurden?
Soll das Überschreiben in Unterklassen verhindert werden?
Diese Frage hat mehrere Teile und daher Antworten.
Q1.
Warum hat Ruby überhaupt globale Variablen wie $$?
Ruby leiht sich aus Perl und LISP. Beide haben globale Variablen.
Ruby erbte die Perl-Philosophie, mehr als einen Weg zu haben das gleiche. Yukihiro Matsumoto - 29. September 2003
Q2.
Es konnte kein ähnliches Verhalten durch Definieren von Zugriffsmethoden erreicht werden und Attribute in Kernel?
Ja, und sie waren es. Es kann jedoch festgehalten werden, dass programmierte Werte vorhanden sind, die eine globale Anwendbarkeit haben und daher einen globalen Geltungsbereich haben sollten, ohne einen Zwischencode einzuführen.
Während es vielleicht mehr OO ist, diese innerhalb einer Klassenmethode zu kapseln, wird die Frage dann, welche für den Benutzer wichtiger ist, Einfachheit oder Stil. Der Name der Skriptdatei, die an die virtuelle Maschine übergeben wird, ist eine Invariante. Wie auch die Befehlszeilenargumente. Es ist wenig vorteilhaft, den Zugriff auf diese Werte durch eine Methode zu abstrahieren. Eine globale Variable ist ausreichend für den Zweck und ist so leicht wie möglich zu erreichen.
Q3.
Soll das Überschreiben in Unterklassen verhindert werden?
Die Antwort darauf ist mir unbekannt.
Schließlich kommen wir zu der Frage, die im Titel gestellt wird:
Wofür sind Ruby Globals nützlich?
Man kann Variablenzuweisungen in Ruby über die Methode trace_var
Kernel verfolgen:
Gibt an STDOUT aus:
%Vor%Man kann sich eine Anwendung vorstellen, die eine ereignisgesteuerte Änderung in einer Variablen mit dem Namen $ state hat, z. B. eine GUI oder einen Sensor-Feed, bei der das einfache Verfolgen von Änderungen an globalen Variablen den Programmcode überflüssig macht.
Tags und Links ruby global-variables