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.