Рубиновые переменные, константы
Переменные Ruby
Переменная - это символ или имя, обозначающее значение. Переменные находятся в ячейках памяти и используются для хранения таких значений, как числовые значения, символы, строки символов или адреса памяти, чтобы их можно было использовать в любой части программы.
Мы обсудили следующие типы переменных и констант, поддерживаемых Ruby:
- Локальные переменные
- Переменные экземпляра
- Переменные класса
- Глобальные переменные
- Константы
Локальная переменная:
Имя локальной переменной должно начинаться со строчной буквы (az) или подчеркивания (_) с восьмибитным набором.
Область локальной переменной
Локальная переменная доступна только из блока ее инициализации. Смотрите следующий пример:
В следующем примере есть три локальные переменные, называемые цветом. Каждому присваивается значение «Красный» в «основной области» программы; двум другим назначаются целые числа в рамках двух отдельных методов. Поскольку каждая локальная переменная имеет различную область действия, назначения не влияют на другие локальные переменные с одинаковыми именами в разных областях. Мы проверили это, вызвав методы в конце программы.
Пример:
color ="Red"
def method1
color = 192
puts("Color Value in method1 : ",color)
end
def method2
color = 255
puts("Color Value method2: ",color)
end
method1
method2
method1
puts("Color Value outside methods : "+color)
Выход:
H: /> ruby abc.rb Значение цвета в методе 1: 192 Значение цвета method2: 255 Значение цвета в методе 1: 192 Значение цвета вне методов: красный
Локальные переменные и методы:
В Ruby имена локальных переменных и методов почти идентичны. Если вы не присвоили одно из этих неоднозначных имен, ruby будет предполагать, что вы хотите вызвать метод. Как только вы присвоите имя ruby, вы предположите, что хотите сослаться на локальную переменную.
Локальная переменная создается, когда синтаксический анализатор встречает назначение, а не когда происходит:
a = 0 if false # does not assign to a
p local_variables # prints [:a]
p a # prints nil
def big_calculation
42 # pretend this takes a long time
end
big_calculation = big_calculation()
Теперь любая ссылка на big_calculation считается локальной переменной и будет кэшироваться. Чтобы вызвать метод, используйте self.big_calculation.
Вы можете принудительно вызвать метод, используя пустые скобки аргумента, как показано выше, или используя явный получатель, такой как self. Использование явного получателя может вызвать NameError, если видимость метода не является публичной.
Другой распространенный случай - использование модификатора, если:
p a if a = 0.zero?
Вместо того, чтобы печатать «true», вы получаете NameError, «неопределенную локальную переменную или метод« a »». Так как ruby анализирует голые левые первого оператора if и еще не видел присваивания ему, предполагается, что вы хотите вызвать метод. Затем Ruby увидит присваивание a и предположит, что вы ссылаетесь на локальный метод.
Путаница возникает из-за неправильного выполнения выражения. Сначала назначается локальная переменная, затем вы пытаетесь вызвать несуществующий метод.
Переменные экземпляра:
Переменные экземпляра совместно используются всеми методами для одного и того же объекта. Имя переменной экземпляра должно начинаться с символа «@», в противном случае имена переменных экземпляра следуют правилам как имя локальной переменной (обсуждалось ранее).
Синтаксис:
@insvar
В следующем примере Student.new создает новый объект - экземпляр класса Student. Переменные экземпляра @student_id и @student_name.
class Student
def initialize(student_id, student_name)
@student_id = student_id
@student_name = student_name
end
def show
puts "Student Name and ID : "
puts(@student_id, @student_name)
end
end
Student.new(1, "Sara").show
Student.new(2, "Raju").show
Выход:
Имя и идентификатор студента: 1 Сара Имя и идентификатор студента: 2 Раджу
Примечание. Неинициализированная переменная экземпляра имеет значение nil.
Переменные класса:
Переменные класса являются общими для класса, его подклассов и его экземпляров.
Переменная класса должна начинаться с @@ (два знака «at»). Остальная часть имени следует тем же правилам, что и переменные экземпляра.
Синтаксис:
@@ classvar
В следующем примере показано, что все классы изменяют одну и ту же переменную. Переменные класса ведут себя как глобальные переменные, которые видны только в дереве наследования. Поскольку Ruby разрешает переменные, сначала просматривая дерево наследования, это может вызвать проблемы, если оба подкласса добавляют переменную класса с одинаковым именем.
Пример:
class School
@@no_off_students = 650
end
# class V sub-class of School
class V < School
@@no_off_students = 75
end
# class VI sub-class of School
class VI < School
@@no_off_students = 80
end
puts School.class_eval("@@no_off_students")
puts V.class_eval("@@no_off_students")
puts VI.class_eval("@@no_off_students")
Выход:
80 80 80
Глобальные переменные:
В Ruby глобальные переменные начинаются со знака $ (знак доллара). Остальная часть имени следует тем же правилам, что и переменные экземпляра. Глобальные переменные доступны везде.
Синтаксис:
$ globalvar
Пример:
$global = 0
class C
puts "in a class: #{$global}"
def my_method
puts "in a method: #{$global}"
$global = $global + 1
$other_global = 3
end
end
C.new.my_method
puts "at top-level, $global: #{$global}, $other_global: #{$other_global}"
Выход:
в классе: 0 в методе: 0 на верхнем уровне: $ global: 1, $ other_global: 3
Неинициализированная глобальная переменная имеет значение nil.
В Ruby есть некоторые специальные глобальные переменные, которые ведут себя по-разному в зависимости от контекста, такого как переменные соответствия регулярного выражения, или имеют побочный эффект при назначении. Смотрите подробности в документации по глобальным переменным.
Рубиновые Константы:
Переменная, имя которой начинается с заглавной буквы (AZ), является константой. Константе можно присвоить значение после ее инициализации, но при этом будет выдано предупреждение. Каждый класс является константой.
Попытка получить доступ к неинициализированной константе вызывает исключение NameError.
Синтаксис:
ABCD
Пример :
class Student
NO_Students = 800
end
puts 'No of students in the school : ', Student::NO_Students
Здесь NO_Students является константой.
Выход:
Количество учеников в школе: 800
Ruby: псевдо-переменные
название | Описание |
---|---|
сам | Контекст выполнения текущего метода. |
ноль | Ничего не выражает nil также считается ложным, а любое другое значение считается истинным в Ruby. |
правда | Выражает правду. |
ложный | Выражает ложь. |
$ 1, $ 2 ... $ 9 | Это содержимое групп захвата для совпадений регулярных выражений. Они локальны для текущего потока и стека фрейма! |
Ruby: предопределенные переменные
название | Описание |
---|---|
$! | Информационное сообщение об исключении, установленное последним «повышением» (последнее выброшенное исключение). |
[электронная почта защищена] | Массив обратной трассировки последнего сгенерированного исключения. |
$ & | Строка, соответствующая последнему успешному совпадению с образцом в этой области. |
$ ` | Строка слева от последнего успешного совпадения. |
$» | Строка справа от последнего успешного совпадения. |
$ + | Последняя группа последнего успешного матча. |
От 1 до 9 долларов | N-я группа последнего успешного регулярного выражения. |
$ ~ | Информация о последнем совпадении в текущей области. |
$ = | Флаг нечувствительности к регистру, по умолчанию nil (не рекомендуется). |
$ / | Разделитель входных записей, новая строка по умолчанию. |
$ / | Разделитель выходных записей для печати и записи IO #. По умолчанию это ноль. |
$, | Разделитель выходного поля для print и Array # join. |
$; | Разделитель по умолчанию для String # split. |
$. | Текущий номер строки ввода последнего файла, который был прочитан. |
$ < | Объект, который обеспечивает доступ к объединению содержимого всех файлов, заданных в качестве аргументов командной строки, или $ stdin (в случае, когда аргументов нет). Только для чтения |
$ FILENAME | Текущий входной файл от $ <. То же, что $ <. Filename. |
$> | Назначение вывода для Kernel.print и Kernel.printf. Значением по умолчанию является $ stdout. |
$ _ | Последняя строка ввода строки get или readline. |
$ 0 | Содержит имя исполняемого скрипта. Может быть назначен. |
$ * | Аргументы командной строки приведены для сценария. Также известный как ARGV |
$$ | Номер процесса Ruby, выполняющего этот скрипт. |
$? | Статус последнего выполненного дочернего процесса. |
$: | Загрузите путь для скриптов и бинарных модулей по загрузке или по требованию. |
$» | Массив содержит имена модулей, загруженные по запросу. |
$ STDERR | Текущий стандартный вывод ошибок. |
$ STDIN | Текущий стандартный ввод. |
$ STDOUT | Текущий стандартный вывод. |
$ -d | Состояние переключателя -d. Назначаемые. |
$ -K | Кодировка символов исходного кода. |
$ -v | Подробный флаг, который устанавливается ключом -v. |
$ -a | Истинно, если задана опция -a (режим «autosplit»). Переменная только для чтения. |
$ -i | Если установлен режим редактирования на месте, эта переменная содержит расширение, в противном случае - ноль. |
$ -l | Истинно, если установлена опция -l (включена «обработка конца строки»). Переменная только для чтения. |
$ -p | True, если установлена опция -p (включен режим "loop"). Переменная только для чтения. |
$ -w | True, если установлена опция -w. |
Ruby: предопределенные константы
название | Описание |
---|---|
__ФАЙЛ__ | Текущий файл. |
__ЛИНИЯ__ | Текущая строка |
__dir__ | Текущий каталог. |
Предыдущий: Ruby Style Guide
Далее: Приоритет операторов Ruby
Новый контент: Composer: менеджер зависимостей для PHP , R программирования