Ruby Variablen

Eine Variable ist ein Speicherort, der beliebige Daten aufnehmen kann, die von jedem Programm verwendet werden können.

Ruby unterstützt fünf Arten von Variablen.

  • Beginnen im Allgemeinen mit Kleinbuchstaben oder Unterstrichen: Variable (Variable).
  • $$ am Anfang: globale Variable (Global variable).
  • @@ am Anfang: Instanzvariable (Instance variable).
  • @@@@ am Anfang: Klassenvariable (Class variable). Klassenvariablen werden über die gesamte Vererbungskette hinweg geteilt.
  • Beginnen mit einem Großbuchstaben: Konstante (Constant).

Sie haben diese Variablen bereits in vorherigen Kapiteln kennengelernt. In diesem Kapitel werden diese fünf Arten von Variablen ausführlich erklärt.

Globale Variablen in Ruby

Der Wert einer nicht initialisierten globalen Variablen ist nilnil, und die Verwendung der Option -w erzeugt eine Warnung.

Das Zuweisen eines Werts an eine globale Variable ändert den globalen Zustand, daher sind globale Variablen nicht empfehlenswert.

Das folgende Beispiel zeigt die Verwendung globaler Variablen.

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global_variable = 10 class Class1 def print_global puts "Die globale Variable wird in Class1 als #$global_variable ausgegeben" end end class Class2 def print_global puts "Die globale Variable wird in Class2 als #$global_variable ausgegeben" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global

Ausprobieren »

Hier ist $global_variable eine globale Variable. Dies erzeugt das folgende Ergebnis:

Hinweis:In Ruby können Sie auf den Wert jeder Variablen oder Konstante zugreifen, indem Sie das Zeichen # vor die Variable oder Konstante setzen.

全局变量在 Class1 中输出为 10
全局变量在 Class2 中输出为 10

Ruby-Instanzvariablen

Instanzvariablen beginnen mit @. Der Wert einer nicht initialisierten Instanzvariable ist nilnil, und die Verwendung der Option -w erzeugt eine Warnung.

Das folgende Beispiel zeigt die Verwendung von Instanzvariablen.

Beispiel

#!/usr/bin/ruby class Customer def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Kunden-ID #@cust_id" puts "Kundenname #@cust_name" puts "Customer address #@cust_addr" end end #Objekt erstellen cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") #Methode aufrufen cust1.display_details() cust2.display_details()

Ausprobieren »

Hier sind @cust_id, @cust_name und @cust_addr Instanzvariablen. Dies erzeugt das folgende Ergebnis:

Customer id 1
Customer name John
Customer address Wisdom Apartments, Ludhiya
Customer id 2
Customer name Poul
Customer address New Empire road, Khandala

Ruby-Klassenvariablen

Klassenvariablen beginnen mit @@ und müssen initialisiert werden, bevor sie in Methodendefinitionen verwendet werden können.

Das Referenzieren einer nicht initialisierten Klassenvariable erzeugt einen Fehler. Klassenvariablen können in Unterklassen oder Untermodulen der Klasse oder des Moduls, in der bzw. dem sie definiert sind, gemeinsam genutzt werden.

Nach der Verwendung der Option -w erzeugt das Neudefinieren einer Klassenvariable eine Warnung.

Das folgende Beispiel zeigt die Verwendung von Klassenvariablen.

Beispiel

#!/usr/bin/ruby class Customer @@no_of_customers=0 def initialize(id, name, addr) @cust_id=id @cust_name=name @cust_addr=addr end def display_details() puts "Kunden-ID #@cust_id" puts "Kundenname #@cust_name" puts "Kundenadresse #@cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Gesamtzahl der Kunden: #@@no_of_customers" end end #Objekt erstellen cust1=Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") #Methode aufrufen cust1.total_no_of_customers() cust2.total_no_of_customers()

Ausprobieren »

Hier ist @@no_of_customers eine Klassenvariable. Dies erzeugt das folgende Ergebnis:

Total number of customers: 1
Total number of customers: 2

Lokale Variablen in Ruby

Lokale Variablen beginnen mit einem Kleinbuchstaben oder einem Unterstrich _. Der Gültigkeitsbereich einer lokalen Variablen reicht von class, module, def oder do bis zum entsprechenden end oder von der linken geschweiften Klammer bis zur rechten geschweiften Klammer {}.

Wenn eine nicht initialisierte lokale Variable aufgerufen wird, wird dies als Aufruf einer Methode ohne Argumente interpretiert.

Das Zuweisen eines Werts zu einer nicht initialisierten lokalen Variablen kann auch als Variablendeklaration angesehen werden. Die Variable bleibt bis zum Ende des aktuellen Gültigkeitsbereichs bestehen. Die Lebensdauer einer lokalen Variablen wird bestimmt, wenn Ruby das Programm parst.

Im obigen Beispiel sind die lokalen Variablen id, name und addr.

Ruby-Konstanten

Konstanten beginnen mit einem Großbuchstaben. Auf Konstanten, die innerhalb einer Klasse oder eines Moduls definiert sind, kann innerhalb der Klasse oder des Moduls zugegriffen werden, während auf Konstanten, die außerhalb einer Klasse oder eines Moduls definiert sind, global zugegriffen werden kann.

Konstanten können nicht innerhalb von Methoden definiert werden. Das Referenzieren einer nicht initialisierten Konstante erzeugt einen Fehler. Das Zuweisen eines Werts zu einer bereits initialisierten Konstante erzeugt eine Warnung.

Beispiel

#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Example VAR1 = 100 VAR2 = 200 def show puts "Der Wert der ersten Konstante ist #{VAR1}" puts "Der Wert der zweiten Konstante ist #{VAR2}" end end #Objekt erstellen object=Example.new() object.show

Ausprobieren »

Hier sind VAR1 und VAR2 Konstanten. Dies ergibt das folgende Ergebnis:

第一个常量的值为 100
第二个常量的值为 200

Ruby-Pseudovariablen

Sie sind spezielle Variablen, die wie lokale Variablen aussehen, sich aber wie Konstanten verhalten. Sie können diesen Variablen keinen Wert zuweisen.

  • self:Das Empfängerobjekt der aktuellen Methode.
  • true:Repräsentiert den Wert true.
  • false:Repräsentiert den Wert false.
  • nil:Repräsentiert den Wert undefined.
  • __FILE__:Der Name der aktuellen Quelldatei.
  • __LINE__:Die Zeilennummer der aktuellen Zeile in der Quelldatei.
Andere Erweiterungen