Ruby Variables
Переменные - это ячейки памяти, в которых хранятся любые данные, которые будут использоваться любой программой. Ruby поддерживает пять типов переменных.
Глобальные переменные Ruby (Ruby Global Variables):
Глобальные переменные начинаются с $. Неинициализированные глобальные переменные имеют значение nil и выдают предупреждения с параметром -w. Присвоение глобальным переменным изменяет глобальный статус. Не рекомендуется использовать глобальные переменные. Они делают программы загадочными.
Вот пример, показывающий использование глобальной переменной.
#!/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 (Ruby Instance Variables):
Переменные экземпляра начинаются с @. Неинициализированные переменные экземпляра имеют значение 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
# 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 (Ruby Class Variables):
Переменные класса начинаются с @@ и должны быть инициализированы, прежде чем их можно будет использовать в определениях методов.
Ссылка на неинициализированную переменную класса приводит к ошибке. Переменные класса совместно используются потомками класса или модуля, в котором определены переменные класса.
Переопределение переменных класса вызывает предупреждения с параметром -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
# 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 (Ruby Local Variables):
Локальные переменные начинаются со строчной буквы или _. Область действия локальной переменной варьируется от class, module, def или do до соответствующего конца или от открывающей скобки блока до его закрывающей скобки (brace) {}.
Когда ссылаются на неинициализированную локальную переменную, это интерпретируется как вызов метода, не имеющего аргументов.
Присвоение неинициализированным локальным переменным также служит объявлением переменной. Переменные начинают существовать до тех пор, пока не будет достигнут конец текущей области. Время жизни локальных переменных определяется, когда Ruby (parses) анализирует программу.
В приведенном выше примере локальные переменные - это id, name и addr.
Константы Ruby (Ruby Constants):
Константы начинаются с заглавной буквы. Константы, определенные в классе или модуле, могут быть доступны из этого класса или модуля, а те, которые определены вне класса или модуля, могут быть доступны глобально.
Константы не могут быть определены в методах. Ссылка на неинициализированную константу вызывает ошибку. Присваивание уже инициализированной константе вызывает предупреждение.
#!/usr/bin/ruby
class Example
VAR1 = 100
VAR2 = 200
def show
puts "Значение первой константы #{VAR1}"
puts "Значение второй константы #{VAR2}"
end
end
# Создать объект
object=Example.new()
object.show
Здесь VAR1 и VAR2 постоянны. Это даст следующий результат:
Значение первой константы 100
Значение второй константы 200
Псевдо-переменные Ruby (Ruby Pseudo-Variables):
Это специальные переменные, которые имеют вид локальных переменных, но ведут себя как константы. Этим переменным нельзя присвоить какое-либо значение.
self: объект-получатель текущего метода.
true: значение, представляющее истину.
false: значение, представляющее ложь.
nil: значение, представляющее неопределенность (nil - ноль, ничего).
__FILE__: имя текущего исходного файла.
__LINE__: номер текущей строки в исходном файле.
Базовые литералы Ruby (Ruby Basic Literals):
Правила, которые Ruby использует для литералов, просты и интуитивно понятны. В этом разделе объясняются все основные литералы Ruby.
Целые числа (Integer Numbers):
Ruby поддерживает целые числа. Целое число может находиться в диапазоне от -2^30 до 2^30-1 или от -2^62 до 2^62-1 (степени двойки). Целые числа в этом диапазоне являются объектами класса Fixnum, а целые числа вне этого диапазона хранятся в объектах класса Bignum.
Вы записываете целые числа, используя необязательный начальный знак, необязательный базовый индикатор (0 для восьмеричного, 0x для шестнадцатеричного или 0b для двоичного), за которым следует строка цифр в соответствующей базе. Знаки подчеркивания игнорируются в строке цифр.
Вы также можете получить целочисленное значение, соответствующее символу ASCII или escape-последовательности, поставив перед ним вопросительный знак.
Пример:
123 # Fixnum decimal
1_234 # Fixnum decimal с подчеркиванием
-500 # Negative Fixnum
0377 # octal
0xff # hexadecimal
0b1011 # binary
? a # символьный код для 'a'
? \ N # код для новой строки (0x0a)
12345678901234567890 # Bignum
ПРИМЕЧАНИЕ: Класс и объекты описаны в отдельной главе этого руководства.
Плавающие числа (Floating Numbers):
Ruby поддерживает целые числа. Это тоже числа, но с десятичными знаками. Числа с плавающей запятой являются объектами класса Float и могут быть любым из следующих:
Пример:
123.4 # значение с плавающей запятой
1.0e6 # экспоненциальное представление
4E20 # точка не требуется
4e+20 # знак перед экспонентой
Строковые литералы (String Literals):
Строки Ruby - это просто последовательности 8-битных байтов, которые являются объектами класса String. Строки в двойных кавычках допускают замену и обратную косую черту, но строки в одинарных кавычках не допускают замену и допускают обратную косую черту только для \\ и \ '
Пример:
#!/usr/bin/ruby -w
puts 'escape using "\\"';
puts 'That\'s right';
Это даст следующий результат:
escape using "\"
That's right
Вы можете подставить значение любого выражения Ruby в строку, используя последовательность # {expr}. Здесь expr может быть любым выражением ruby.
#!/usr/bin/ruby -w
puts "Значение умножения : #{24*60*60}";
Это даст следующий результат:
Значение умножения: 86400
Обозначения с обратной косой чертой (Backslash Notations):
Ниже приведен список нотаций с обратной косой чертой, поддерживаемых Ruby:
Обозначение Представленный символ
\n Newline Новая строка (0x0a)
\r Carriage return Возврат каретки (0x0d)
\f Formfeed (0x0c)
\b Backspace (0x08)
\a Bell (0x07)
\e Escape (0x1b)
\s Space (0x20)
\nnn Octal notation (n begin 0-7)
\xnn Hexadecimal (n begin 0-9, a-f или A-F)
\cx, \C-x Control-x
\M-x Meta-x (c | 0x80)
\M-\C-x Meta-Control-x
\x Character x
Дополнительные сведения о Ruby Strings см. Ruby Strings.
Ruby массивы (Ruby Arrays):
Литералы Ruby Array создаются путем помещения ряда разделенных запятыми ссылок на объекты между квадратными скобками. Завершающая запятая игнорируется.
Пример: *во всех примерах удобно пользоваться "TryRuby"
#!/usr/bin/ruby
ary = [ "fred", 10, 3.14, "Это строка", "последний элемент", ]
ary.each do |i|
puts i
end
Это даст следующий результат:
fred
10
3.14
Это строка
последний элемент
Для получения более подробной информации о Ruby Arrays, просмотрите Ruby Arrays.
Ruby Hashes (Ruby Hashes):
Литеральный Ruby Hash создается путем помещения списка пар ключ / значение в фигурные скобки, с запятой или последовательностью => между ключом и значением. Завершающая запятая игнорируется.
Пример:
#!/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.
Ruby Ranges (диапазоны):
Диапазон представляет собой интервал. Набор значений с началом и концом. Диапазоны могут быть созданы с использованием литералов 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 Ranges.