English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

变量 Ruby

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.

Variabile globale Ruby

全局变量以 $ 开头。未初始化的全局变量的值为 nil,在使用 -w 选项后,会产生警告。

给全局变量赋值会改变全局状态,所以不建议使用全局变量。

以下示例显示了全局变量的用法。

Esempio online

#!/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

Ruby 示例变量

示例变量以 @ 开头。未初始化的示例变量的值为 nil,在使用 -w 选项后,会产生警告。

以下示例显示了示例变量的用法。

Esempio online

#!/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

Ruby 类变量

类变量以 @@ 开头,且必须初始化后才能在方法定义中使用。

引用一个未初始化的类变量会产生错误。类变量在定义它的类或模块的子类或子模块中可共享使用。

在使用 -w 选项后,重载类变量会产生警告。

以下示例显示了类变量的用法。

Esempio online

#!/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

Variabili locali Ruby

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.

Costanti Ruby

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.

Esempio online

#!/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 第二个常量的

伪变量 Ruby

变量特殊它们是,外观局部变量有着但行为常量像。您不能给这些变量任何值赋。

  • self: 对象接收器方法当前。

  • true: 值代表 true。

  • false: 值代表 false。

  • nil: 值代表 undefined。

  • __FILE__: 名称当前源文件。

  • __LINE__: 编号当前行源文件。