Переменные – это ячейки памяти, в которых хранятся любые данные, которые будут использоваться любой программой.
Ruby поддерживает пять типов переменных. Вы уже прошли небольшое описание этих переменных в предыдущей главе. Эти пять типов переменных описаны в этой главе.
Глобальные переменные начинаются с $. Неинициализированные глобальные переменные имеют значение nil и создают предупреждения с параметром -w.
Присвоение глобальных переменных изменяет глобальный статус. Не рекомендуется использовать глобальные переменные. Они делают программы загадочными.
Ниже приведен пример использования глобальной переменной.
#!/usr/bin/ruby $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 является глобальной переменной. Это приведет к следующему результату:
Глобальная переменная в 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 "Customer id #@cust_id" puts "Customer name #@cust_name" puts "Customer address #@cust_addr" end end # Создание объектов cust1 = Customer.new("1", "AndreyEx", "Home, Krasnodar") cust2 = Customer.new("2", "Max", "Works, Rostov") # Вызов методов cust1.display_details() cust2.display_details()
Здесь @cust_id, @cust_name и @cust_addr являются переменными экземпляра. Это приведет к следующему результату:
Customer id 1 Customer name AndreYEx Customer address Home, Krasnodar Customer id 2 Customer name Max Customer address Works, Rostov
Переменные класса начинаются с @@ и должны быть инициализированы до их использования в определениях методов.
Ссылка на неинициализированную переменную класса вызывает ошибку. Переменные класса распределяются между потомками класса или модуля, в которых определены переменные класса.
Переопределение переменных класса создает предупреждения с параметром -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", "AndreyEx", "Home, Krasnodar") cust2 = Customer.new("2", "Max", "Works, Rostov") # CВызов методов cust1.total_no_of_customers() cust2.total_no_of_customers()
Здесь @@ no_of_customers – это переменная класса. Это приведет к следующему результату:
Total number of customers: 1 Total number of customers: 2
Локальные переменные начинаются с строчной буквы или _. Объем локальной переменной варьируется от класса, модуля, def или до соответствующего конца или от скобки открытия блока до его близкой привязки {}.
Когда ссылается неинициализированная локальная переменная, она интерпретируется как вызов метода, который не имеет аргументов.
Назначение неинициализированных локальных переменных также служит объявлением переменной. Переменные начинают существовать до тех пор, пока не будет достигнут конец текущей области. Время жизни локальных переменных определяется, когда Ruby анализирует программу.
В приведенном выше примере локальными переменными являются id, name и addr.
Константы начинаются с прописной буквы. Константы, определенные в классе или модуле, могут быть доступны из этого класса или модуля, а те, которые определены вне класса или модуля, могут быть доступны по всему миру.
Константы не могут быть определены в методах. Обращение к неинициализированной константе вызывает ошибку. Выполнение задания константе, которая уже инициализирована, выдает предупреждение.
#!/usr/bin/ruby class Example VAR1 = 100 VAR2 = 200 def show puts "Значение первой константы есть #{VAR1}" puts "Значение второй константы есть #{VAR2}" end end # Create Objects object = Example.new() object.show
Здесь VAR1 и VAR2 являются константами. Это приведет к следующему результату:
Значение первой константы есть 100 Значение второй константы есть 200
Это специальные переменные, которые имеют локальные переменные, но ведут себя как константы. Вы не можете присвоить значения этим переменным.
Правила, используемые 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 # значение с плавающей запятой 1.0e6 # экспоненциальное представление 4E20 # точка не требуется 4e+20 # знак перед экспоненциальным
Строки Ruby – это просто последовательности 8-битных байтов, и они являются объектами класса String. Строки с двойными кавычками допускают замещение и обратную косую черту, но строки с одним кавычком не позволяют замену и позволяют обозначать обратную косую черту только для \\ и \
#!/usr/bin/ruby -w puts 'пробел с помощью "\\"'; puts 'That\'s right';
Это приведет к следующему результату:
пробел с помощью "\" That's right
Вы можете подставить значение любого выражения Ruby в строку, используя последовательность # {expr} . Здесь expr может быть любым выражением ruby.
#!/usr/bin/ruby -w puts "Значение Умножения : #{24*60*60}";
Это приведет к следующему результату:
Значение Умножения : 86400
Ниже приведен список обозначений Backslash, поддерживаемых Ruby:
\n | Новая линия (0x0a) |
\r | Возврат каретки (0x0d) |
\f | Подача бумаги (0x0c) |
\b | клавиша Backspace (0x08) |
\a | звонок (0x07) |
\e | Escape (0x1b) |
\s | Пробел (0x20) |
\nnn | Восьмеричная запись (n being 0-7) |
\xnn | Шестнадцатеричное представление (n being 0-9, a-f, or A-F) |
\cx, \C-x | Control-x |
\M-x | Meta-x (c | 0x80) |
\M-\C-x | Meta-Control-x |
\x | Символ x |
Для более подробной информации о Ruby Strings, пройдите на страницу Ruby. Строки.
Литералы массивов в Ruby создаются путем размещения разделенных запятыми рядов ссылок на объекты между квадратными скобками. Задняя запятая игнорируется.
#!/usr/bin/ruby ary = [ "AndreyEx", 10, 3.14, "Это строка", "последний элемент", ] ary.each do |i| puts i end
Это приведет к следующему результату:
AndreyEx 10 3.14 Это строка последний элемент
Для более подробной информации о Ruby Arrays, пройдите на страницу Ruby. Массивы.
Буквальный Хэш в Ruby создается путем размещения списка пар ключ / значение между фигурными скобками с запятой или последовательностью => между ключом и значением. Задняя запятая игнорируется.
#!/usr/bin/ruby hsh = colors = { "красный" => 0xf00, "зеленый" => 0x0f0, "синий" => 0x00f } hsh.each do |key, value| print key, " есть ", value, "\n" end
Это приведет к следующему результату:
красный есть 3840 зеленый есть 240 синий есть 15
Для более подробной информации о Ruby Hashes, пройдите на страницу Ruby. Хэши.
Диапазон представляет собой интервал, который представляет собой набор значений с началом и концом. Диапазоны могут быть построены с использованием литералов s..e и s … e или с Range.new.
Диапазоны, построенные с использованием .. работают от начала до конца включительно. Те, которые созданы с использованием … исключают конечное значение. При использовании в качестве итератора диапазоны возвращают каждое значение в последовательности.
Диапазон (1..5) означает, что он включает в себя значения 1, 2, 3, 4, 5, а диапазон (1 … 5) означает, что он включает 1, 2, 3, 4 значения.
#!/usr/bin/ruby (10..15).each do |n| print n, ' ' end
Это приведет к следующему результату:
10 11 12 13 14 15
Для более подробной информации о Ruby Ranges, пройдите на сайт Ruby. Диапазоны.