English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Переменные - это места хранения данных, которые могут быть использованы любым программным обеспечением.
Ruby поддерживает五种类型的变量。
Обычно lowercase и подчеркивания на начальном месте: переменные (Variable).
$ на начальном месте: глобальные переменные (Global variable).
@ на начальном месте: примерные переменные (Instance variable).
@@ на начальном месте: классовые переменные (Class variable) классовые переменные.shared throughout the inheritance chain
Начальные заглавные буквы: константы (Constant).
Вы уже大致了解了这些变量在前面的章节中,本章节将为您详细讲解这五种类型的变量。
Глобальные переменные начинаются с $. Значение неинициализированной глобальной переменной равно 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 initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end def display_details() puts "ID клиента @cust_id" puts "Имя клиента @cust_name" puts "Адрес клиента @cust_addr" end end # Создание объекта cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala") # Вызов метода 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 initialize(id, name, addr) @cust_id = id @cust_name = name @cust_addr = addr end def display_details() puts "ID клиента @cust_id" puts "Имя клиента @cust_name" puts "Адрес клиента @cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Общее количество клиентов: #@@no_of_customers" end end # Создание объекта cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya") cust2 = Customer.new("2", "Poul", "New Empire road, Khandala") # Вызов метода cust1.total_no_of_customers() cust2.total_no_of_customers()
Здесь @@no_of_customers является классовой переменной. Это приведет к следующим результатам:
Общее количество клиентов: 1 Общее количество клиентов: 2
Локальные переменные начинаются с малой буквы или подчеркивания _. Область действия локальной переменной начинается от class, module, def или do до соответствующего конца или от левой скобки {} до правой.
Когда вызывается неинициализированная локальная переменная, она интерпретируется как вызов метода без параметров.
Assigning a value to an uninitialized local variable также может быть интерпретировано как переменная声明. Переменная будет существовать до тех пор, пока текущий домен не закончится. Жизненный цикл локальной переменной определяет Ruby при парсинге программы.
В данном примере локальные переменные - это id, name и addr.
Константы начинаются с заглавной буквы. Константы, определенные внутри класса или модуля, могут быть доступы изнутри класса или модуля, а константы, определенные вне класса или модуля, могут быть доступны глобально.
Константы не могут быть определены внутри метода. Указание неинициализированной константы приведет к ошибке. Assigning a value to an already initialized constant会产生警告。
#!/usr/bin/ruby # -*- coding: UTF-8 -*- class Example VAR1 = 100 VAR2 = 200 def show puts "Значение первой константы равно #{VAR1}" puts "Значение второй константы равно #{VAR2}" end end # Создание объекта object=Example.new() object.show
Здесь VAR1 и VAR2 являются константами. Это приведет к следующим результатам:
Значение первой константы равно 100 Значение второй константы равно 200
Это особые переменные, которые имеют вид локальных переменных, но ведут себя как константы. Вы не можете присвоить этим переменным任何 значение.
self: Объект受体 текущего метода.
true: Значение true.
false: Значение false.
nil: Значение undefined.
__FILE__: Имя текущего исходного файла.
__LINE__: Номер строки в исходном файле.