English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Una variabile è una posizione di memorizzazione che contiene qualsiasi tipo di dati utilizzabile da qualsiasi programma.
Ruby supporta cinque tipi di variabili.
Iniziale in minuscolo o trattino basso: Variabile (Variable).
Iniziale con $: Variabile globale (Global variable).
Iniziale con @: Variabile di esempio (Instance variable).
Iniziale con @@: Variabile di classe (Class variable). Le variabili di classe sono condivise in tutta la catena di ereditarietà.
Iniziale in maiuscolo: Costante (Constant).
Hai già avuto una panoramica di queste variabili nei capitoli precedenti, in questo capitolo ti spiegherò in dettaglio i cinque tipi di variabili.
全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。
给全局变量赋值会改变全局状态,所以不建议使用全局变量。
以下示例显示了全局变量的用法。
#!/usr/bin/ruby # -*- coding: UTF-8 -*- $global_variable = 10 class Class1 def print_global puts "全局变量在 Class1 中输出为 #$global_variable" end end class Class2 def print_global puts "全局变量在 Class2 中输出为 #$global_variable" end end class1obj = Class1.new class1obj.print_global class2obj = Class2.new class2obj.print_global
在这里,$global_variable 是全局变量。这将产生以下结果:
注意:在 Ruby 中,您可以通过在变量或常量前面放置 # 字符,来访问任何变量或常量的值。
全局变量在 Class1 中输出为 10 全局变量在 Class2 中输出为 10
示例变量以 @ 开头。未初始化的示例变量的值为 nil,在使用 -w 选项后,会产生警告。
以下示例显示了示例变量的用法。
#!/usr/bin/ruby class Customer def initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end def display_details() puts "ID cliente @cust_id" puts "Nome cliente @cust_name" puts "Indirizzo cliente @cust_addr" end end # 创建对象 cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala") # Chiamata metodo cust1.display_details() cust2.display_details()
在这里,@cust_id、@cust_name 和 @cust_addr 是示例变量。这将产生以下结果:
Customer id 1 Customer name John Customer address Wisdom Apartments, Ludhiya Customer id 2 Customer name Poul Customer address New Empire road, Khandala
类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。
引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。
在使用 -w 选项后,重载类变量会产生警告。
以下示例显示了类变量的用法。
#!/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 "ID cliente @cust_id" puts "Nome cliente @cust_name" puts "Indirizzo cliente @cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Totale numero di clienti: #@@no_of_customers" end end # 创建对象 cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala") # Chiamata metodo cust1.total_no_of_customers() cust2.total_no_of_customers()
In questo caso, @@no_of_customers è una variabile di classe. Questo produce il seguente risultato:
Totale numero di clienti: 1 Totale numero di clienti: 2
Le variabili locali iniziano con lettere minuscole o underscore _. L'ambito delle variabili locali va da class, module, def o do fino alla fine corrispondente o dal grande parentesi aperto alla grande parentesi chiusa {}.
Quando si chiama una variabile locale non inizializzata, viene interpretata come una chiamata a un metodo senza parametri.
L'assegnazione a una variabile locale non inizializzata può essere considerata come una dichiarazione di variabile. La variabile esisterà fino alla fine del dominio corrente. La vita utile delle variabili locali viene determinata durante la解析 del programma Ruby.
Nell'esempio sopra, le variabili locali sono id, name e addr.
Le costanti iniziano con lettere maiuscole. Le costanti definite all'interno di una classe o modulo possono essere accedute dall'interno della classe o modulo, mentre quelle definite all'esterno possono essere accedute globalmente.
Le costanti non possono essere definite all'interno di un metodo. L'accesso a una costante non inizializzata produce un errore. L'assegnazione a una costante già inizializzata produce un avviso.
#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Esempio VAR1 = 100 VAR2 = 200 def show puts "值为 100 第一个常量的 #{VAR1}" puts "值为 200 第二个常量的 #{VAR2}" end end # 创建对象 new()=Example.object show.object
在这里,VAR1 和 VAR2 常量它们是。这将产生以下结果:
值为 100 第一个常量的 值为 200 第二个常量的
变量特殊它们是,外观局部变量有着但行为常量像。您不能给这些变量任何值赋。
self: 对象接收器方法当前。
true: 值代表 true。
false: 值代表 false。
nil: 值代表 undefined。
__FILE__: 名称当前源文件。
__LINE__: 编号当前行源文件。