Учебники

Ruby — переменные, константы и литералы

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

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

Ruby Global Variables

Глобальные переменные начинаются с $. Неинициализированные глобальные переменные имеют значение nil и выдают предупреждения с опцией -w.

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

Вот пример, показывающий использование глобальной переменной.

Live Demo

#!/usr/bin/ruby

$global_variable = 10
class Class1
   def print_global
      puts "Global variable in Class1 is #$global_variable"
   end
end
class Class2
   def print_global
      puts "Global variable in Class2 is #$global_variable"
   end
end

class1obj = Class1.new
class1obj.print_global
class2obj = Class2.new
class2obj.print_global

Здесь $ global_variable является глобальной переменной. Это даст следующий результат —

ПРИМЕЧАНИЕ. — В Ruby вы МОЖЕТЕ получить доступ к значению любой переменной или константы, поставив символ хеша (#) непосредственно перед этой переменной или константой.

Global variable in Class1 is 10
Global variable in Class2 is 10

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

Переменные экземпляра начинаются с @. Неинициализированные переменные экземпляра имеют значение nil и выдают предупреждения с опцией -w.

Вот пример, показывающий использование переменных экземпляра.

Live Demo

#!/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 "Customer address #@cust_addr"
   end
end

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
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.

Вот пример, показывающий использование переменной класса —

Live Demo

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

# Create Objects
cust1 = Customer.new("1", "John", "Wisdom Apartments, Ludhiya")
cust2 = Customer.new("2", "Poul", "New Empire road, Khandala")

# Call Methods
cust1.total_no_of_customers()
cust2.total_no_of_customers()

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

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

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

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

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

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

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

Рубиновые Константы

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

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

Live Demo

#!/usr/bin/ruby

class Example
   VAR1 = 100
   VAR2 = 200
   def show
      puts "Value of first Constant is #{VAR1}"
      puts "Value of second Constant is #{VAR2}"
   end
end

# Create Objects
object = Example.new()
object.show

Здесь VAR1 и VAR2 являются константами. Это даст следующий результат —

Value of first Constant is 100
Value of second Constant is 200

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

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

  • self — объект получателя текущего метода.

  • true — значение, представляющее true.

  • false — значение, представляющее false.

  • nil — значение, представляющее неопределенное.

  • __FILE__ — Имя текущего исходного файла.

  • __LINE__ — Текущий номер строки в исходном файле.

self — объект получателя текущего метода.

true — значение, представляющее true.

false — значение, представляющее false.

nil — значение, представляющее неопределенное.

__FILE__ — Имя текущего исходного файла.

__LINE__ — Текущий номер строки в исходном файле.

Ruby Basic Literal

Правила, которые Ruby использует для литералов, просты и интуитивно понятны. Этот раздел объясняет все основные литералы Ruby.

Целые числа

Ruby поддерживает целые числа. Целое число может варьироваться от -2 30 до 2 30-1 или от -2 62 до 2 62-1 . Целые числа в этом диапазоне являются объектами класса Fixnum, а целые числа вне этого диапазона хранятся в объектах класса Bignum .

Вы пишете целые числа с использованием необязательного начального знака, необязательного базового индикатора (0 для восьмеричного, 0x для шестнадцатеричного или 0b для двоичного), за которым следует строка цифр в соответствующем основании. Символы подчеркивания игнорируются в строке цифр.

Вы также можете получить целочисленное значение, соответствующее символу ASCII, или экранировать последовательность, поставив перед ней знак вопроса.

пример

123                  # Fixnum decimal
1_234                # Fixnum decimal with underline
-500                 # Negative Fixnum
0377                 # octal
0xff                 # hexadecimal
0b1011               # binary
?a                   # character code for 'a'
?\n                  # code for a newline (0x0a)
12345678901234567890 # Bignum

ПРИМЕЧАНИЕ. — Класс и объекты объясняются в отдельной главе этого руководства.

Плавающие числа

Ruby поддерживает плавающие числа. Они также числа, но с десятичными знаками. Числа с плавающей точкой являются объектами класса Float и могут быть следующими:

пример

123.4                # floating point value
1.0e6                # scientific notation
4E20                 # dot not required
4e+20                # sign before exponential

Строковые литералы

Рубиновые строки — это просто последовательности 8-битных байтов, и они являются объектами класса String. Строки в двойных кавычках допускают подстановку и запись с обратной косой чертой, но строки в одинарных кавычках не допускают подстановку и допускают запись с обратной косой чертой только для \\ и \ ‘

пример

Live Demo

#!/usr/bin/ruby -w

puts 'escape using "\\"';
puts 'That\'s right';

Это даст следующий результат —

escape using "\"
That's right

Вы можете подставить значение любого выражения Ruby в строку, используя последовательность # {expr} . Здесь expr может быть любым выражением ruby.

Live Demo

#!/usr/bin/ruby -w

puts "Multiplication Value : #{24*60*60}";

Это даст следующий результат —

Multiplication Value : 86400

Нотация с обратной косой чертой

Ниже приведен список нотаций обратной косой черты, поддерживаемых Ruby —

нотация Персонаж представлен
\ п Новая строка (0x0a)
Возврат каретки (0x0d)
\ е Formfeed (0x0c)
\ б Backspace (0x08)
\ а Белл (0x07)
\ е Побег (0x1b)
\ s Пробел (0x20)
\ NNN Восьмеричное обозначение (n = 0-7)
\ Хпп Шестнадцатеричное обозначение (n от 0 до 9, af или AF)
\ cx, \ Cx Контроль-х
\ Mx Мета-х (c | 0x80)
\ M- \ Cx Meta-Control-х
\Икс Персонаж х

Для более подробной информации о Ruby Strings, перейдите через Ruby Strings .

Ruby Arrays

Литералы Ruby Array создаются путем размещения разделенных запятыми серий ссылок на объекты между квадратными скобками. Завершающая запятая игнорируется.

пример

Live Demo

#!/usr/bin/ruby

ary = [  "fred", 10, 3.14, "This is a string", "last element", ]
ary.each do |i|
   puts i
end

Это даст следующий результат —

fred
10
3.14
This is a string
last element

Для более подробной информации о Ruby Arrays, перейдите через Ruby Arrays .

Рубиновые Хэши

Литеральный хэш Ruby создается путем размещения списка пар ключ / значение между фигурными скобками, с запятой или последовательностью => между ключом и значением. Завершающая запятая игнорируется.

пример

Live Demo

#!/usr/bin/ruby

hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f }
hsh.each do |key, value|
   print key, " is ", value, "\n"
end

Это даст следующий результат —

red is 3840
green is 240
blue is 15

Для более подробной информации о Ruby Hashes, перейдите через Ruby Hashes .

Рубиновые диапазоны

Диапазон представляет интервал, который представляет собой набор значений с началом и концом. Диапазоны могут быть созданы с использованием литералов s..e и s … e или Range.new.

Диапазоны, построенные с использованием .., запускаются от начала до конца включительно. Те, которые созданы с использованием … исключают конечное значение. При использовании в качестве итератора диапазоны возвращают каждое значение в последовательности.

Диапазон (1..5) означает, что он включает в себя 1, 2, 3, 4, 5 значений, а диапазон (1 … 5) означает, что он включает в себя 1, 2, 3, 4 значения.

пример

Live Demo

#!/usr/bin/ruby

(10..15).each do |n| 
   print n, ' ' 
end

Это даст следующий результат —

10 11 12 13 14 15

Для более подробной информации о Ruby Ranges, пройдите через Ruby Ranges .