Ruby Переменные

Переменная — это место хранения, в котором хранятся любые данные, которые могут использоваться любой программой.

Ruby поддерживает пять типов переменных.

  • Обычно начинаются со строчных букв или символов подчёркивания: variable (Variable).
  • $$ в начале: глобальная переменная (Global variable).
  • @@ в начале: переменная экземпляра (Instance variable).
  • @@@@ в начале: переменная класса (Class variable). Переменные класса являются общими для всей цепочки наследования.
  • Начинается с заглавной буквы: константа (Constant).

Вы уже узнали об этих переменных в предыдущих главах. В этой главе подробно объясняются эти пять типов переменных.

Глобальные переменные Ruby

Значение неинициализированной глобальной переменной — nilnil, а использование параметра -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

Переменные экземпляра Ruby

Переменные экземпляра начинаются с @. Значение неинициализированной переменной экземпляра — nilnil, а использование опции -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 "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Адрес клиента #@cust_addr" end end #Создать объект cust1=Customer.new("1", "John", "Апартаменты Уиздом, Лудхия") 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

Переменные класса в Ruby

Переменные класса начинаются с @@ и должны быть инициализированы, прежде чем их можно будет использовать в определениях методов.

Обращение к неинициализированной переменной класса приводит к ошибке. Переменные класса могут использоваться совместно в подклассах или подмодулях класса или модуля, в которых они определены.

После использования опции -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 "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end def total_no_of_customers() @@no_of_customers += 1 puts "Total number of customers: #@@no_of_customers" end end #Создать объект cust1=Customer.new("1", "Джон", "Апартаменты Уиздом, Лудхия") cust2=Customer.new("2", "Poul", "New Empire road, Khandala") #Вызвать метод cust1.total_no_of_customers() cust2.total_no_of_customers()

Попробуйте »

Здесь @@no_of_customers — это переменная класса. Это даст следующий результат:

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

Локальные переменные Ruby

Локальные переменные начинаются со строчной буквы или знака подчеркивания _. Область видимости локальной переменной — от class, module, def или do до соответствующего end, либо от левой фигурной скобки до правой фигурной скобки {}.

Когда вызывается неинициализированная локальная переменная, это интерпретируется как вызов метода без аргументов.

Присваивание значения неинициализированной локальной переменной также можно рассматривать как объявление переменной. Переменная сохраняется до конца текущей области видимости. Время жизни локальной переменной определяется при синтаксическом разборе программы Ruby.

В приведенном выше примере локальные переменные — это id, name и addr.

Константы Ruby

Константы начинаются с заглавной буквы. Константы, определенные внутри класса или модуля, доступны изнутри класса или модуля, а константы, определенные вне класса или модуля, доступны глобально.

Константы нельзя определять внутри методов. Ссылка на неинициализированную константу вызывает ошибку. Присваивание значения уже инициализированной константе вызывает предупреждение.

Пример

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

Псевдопеременные Ruby

Это специальные переменные, которые выглядят как локальные переменные, но ведут себя как константы. Вы не можете присвоить этим переменным никакого значения.

  • self:Объект-получатель текущего метода.
  • true:Представляет значение true.
  • false:Представляет значение false.
  • nil:Представляет неопределённое значение.
  • __FILE__:Имя текущего исходного файла.
  • __LINE__:Номер текущей строки в исходном файле.
Другие расширения