кодесурса

Рубиновые переменные, константы

script1adsense2code
script1adsense3code

Переменные 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 программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code