Глобальные переменные
Предопределённые глобальные переменные
Некоторые предопределённые глобальные переменные имеют синонимы, доступные через модуль English. Для каждой из них приведён английский синоним.
Для использования модуля:
require 'English'
Исключения
$! (Исключение)
Содержит объект Exception, установленный методом Kernel#raise:
begin
raise RuntimeError.new('Boo!')
rescue RuntimeError
p $!
end
Вывод:
#<RuntimeError: Boo!>
English - $ERROR_INFO
$@ (Стек вызовов)
То же, что $!.backtrace; возвращает массив позиций стека вызовов:
begin
raise RuntimeError.new('Boo!')
rescue RuntimeError
pp $@.take(4)
end
Вывод:
["(irb):338:in `<top (required)>'", "/snap/ruby/317/lib/ruby/3.2.0/irb/workspace.rb:119:in `eval'", "/snap/ruby/317/lib/ruby/3.2.0/irb/workspace.rb:119:in `evaluate'", "/snap/ruby/317/lib/ruby/3.2.0/irb/context.rb:502:in `evaluate'"]
English - $ERROR_POSITION.
Сопоставление с образцом
Эти глобальные переменные хранят информацию о последнем успешном сопоставлении в текущем контексте.
Подробности и примеры см. в Глобальные переменные регулярных выражений.
$~ (MatchData)
Объект MatchData, созданный из совпадения; локальный для потока и фрейма.
English - $LAST_MATCH_INFO.
$& (Совпавший подстрока)
Совпавшая строка.
English - $MATCH.
$` (Подстрока до совпадения)
Строка слева от совпадения.
English - $PREMATCH.
$' (Подстрока после совпадения)
Строка справа от совпадения.
English - $POSTMATCH.
$+ (Последняя сопоставленная группа)
Последняя сопоставленная группа.
English - $LAST_PAREN_MATCH.
$1, $2, и т.д. (Сопоставленная группа)
Для $n n-я группа совпадения.
Нет перевода.
Разделители
$/ (Разделитель записей ввода)
Разделитель записей ввода, по умолчанию — перевод строки.
English - $INPUT_RECORD_SEPARATOR, $RS.
Алиас: $-0.
$\ (Разделитель записей вывода)
Разделитель записей вывода, по умолчанию — nil.
English - $OUTPUT_RECORD_SEPARATOR, $ORS.
Потоки
$stdin (Стандартный вход)
Текущий поток стандартного ввода; по умолчанию:
$stdin # => #<IO:<STDIN>>
$stdout (Стандартный выход)
Текущий поток стандартного вывода; по умолчанию:
$stdout # => #<IO:<STDOUT>>
$stderr (Стандартная ошибка)
Текущий поток стандартной ошибки; по умолчанию:
$stderr # => #<IO:<STDERR>>
$< (ARGF или $stdin)
Указатель на поток ARGF, если он не пуст, иначе на поток $stdin; только для чтения.
English - $DEFAULT_INPUT.
$> (По умолчанию стандартный вывод)
Поток вывода, по умолчанию $stdout.
English - <tt>$DEFAULT_OUTPUT
$. (Позиция ввода)
Позиция ввода (номер строки) в недавно прочитанном потоке.
English - $INPUT_LINE_NUMBER, $NR
$_ (Последняя прочитанная строка)
Строка (строковый тип) из недавно прочитанного потока.
English - $LAST_READ_LINE.
Процессы
$0
Изначально содержит имя сценария, который выполняется; может быть переназначено.
$* (ARGV)
Указатель на ARGV.
English - $ARGV.
$$ (Process ID)
Идентификатор процесса текущего процесса. То же, что и Process.pid.
English - $PROCESS_ID, $PID.
$? (Статус дочернего процесса)
Изначально nil, в противном случае объект Process::Status, созданный для завершившегося дочернего процесса; локальный для потока.
English - $CHILD_STATUS.
$LOAD_PATH (Путь загрузки)
Содержит массив путей, которые будут просматриваться методами Kernel#load и Kernel#require.
Метод Singleton $LOAD_PATH.resolve_feature_path(feature) возвращает:
-
[:rb, path], гдеpath— путь к файлу Ruby, который нужно загрузить для данногоfeature. -
[:so+ path], гдеpath— путь к файлу совместно используемой библиотеки, который нужно загрузить для данногоfeature. -
nilесли такогоfeatureиpathнет.
Примеры:
$LOAD_PATH.resolve_feature_path('timeout')
# => [:rb, "/snap/ruby/317/lib/ruby/3.2.0/timeout.rb"]
$LOAD_PATH.resolve_feature_path('date_core')
# => [:so, "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/date_core.so"]
$LOAD_PATH.resolve_feature_path('foo')
# => nil
Алиас: $: и $-I.
$LOADED_FEATURES
Содержит массив путей к загруженным файлам:
$LOADED_FEATURES.take(10) # => ["enumerator.so", "thread.rb", "fiber.so", "rational.so", "complex.so", "ruby2_keywords.rb", "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/enc/encdb.so", "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/enc/trans/transdb.so", "/snap/ruby/317/lib/ruby/3.2.0/x86_64-linux/rbconfig.rb", "/snap/ruby/317/lib/ruby/3.2.0/rubygems/compatibility.rb"]
Алиас: $".
Отладка
$FILENAME
Значение, возвращаемое методом ARGF.filename.
$DEBUG
Изначально true если командная строка содержит опцию -d или --debug, в противном случае false; может быть изменено в ходе выполнения программы.
При true, печатает каждое возникшее исключение в $stderr.
Алиас: $-d.
$VERBOSE
Изначально true если командная строка содержит опцию -v или -w, в противном случае false; может быть изменено в ходе выполнения программы на любое из этих значений или на nil.
При true, включает сообщения об ошибках Ruby.
При nil, отключает сообщения об ошибках, включая сообщения из метода Kernel#warn.
Алиас: $-v и $-w.
Другие переменные
$-a
Указывается ли опция командной строки -a; только для чтения.
$-i
Содержит расширение, заданное в опции командной строки -i, или nil если не задано.
Псевдоним метода ARGF.inplace_mode.
$-l
Устанавливается ли опция командной строки -l; только для чтения.
$-p
Устанавливается ли опция командной строки -p; только для чтения.
Устаревшие
$=
$,
$;
Предопределённые глобальные константы
Потоки
STDIN
Поток стандартного ввода (значение по умолчанию для $stdin):
STDIN # => #<IO:<STDIN>>
STDOUT
Поток стандартного вывода (значение по умолчанию для $stdout):
STDOUT # => #<IO:<STDOUT>>
STDERR
Поток стандартной ошибки (значение по умолчанию для $stderr):
STDERR # => #<IO:<STDERR>>
Окружение
ENV
Хэш, содержащий имена и значения текущих переменных окружения:
ENV.take(5) # => [["COLORTERM", "truecolor"], ["DBUS_SESSION_BUS_ADDRESS", "unix:path=/run/user/1000/bus"], ["DESKTOP_SESSION", "ubuntu"], ["DISPLAY", ":0"], ["GDMSESSION", "ubuntu"]]
ARGF
Виртуальное объединение файлов, заданных в командной строке, или поток $stdin если файлы не указаны, или после того, как все файлы были прочитаны.
ARGV
Массив аргументов, переданных в командной строке.
TOPLEVEL_BINDING
Связывание Binding верхнего уровня:
TOPLEVEL_BINDING # => #<Binding:0x00007f58da0da7c0>
RUBY_VERSION
Версия Ruby:
RUBY_VERSION # => "3.2.2"
RUBY_RELEASE_DATE
Дата выпуска:
RUBY_RELEASE_DATE # => "2023-03-30"
RUBY_PLATFORM
Идентификатор платформы:
RUBY_PLATFORM # => "x86_64-linux"
RUBY_PATCHLEVEL
Числовой номер патча для этой версии Ruby:
RUBY_PATCHLEVEL # => 53
Для сборки разработчика этот номер будет -1.
RUBY_REVISION
Хэш коммита Git для этой версии Ruby:
RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015"
RUBY_COPYRIGHT
Строка с информацией о копирайтах:
RUBY_COPYRIGHT # => "ruby - Copyright (C) 1993-2023 Yukihiro Matsumoto"
RUBY_ENGINE
Название реализации Ruby:
RUBY_ENGINE # => "ruby"
RUBY_ENGINE_VERSION
Версия реализации Ruby:
RUBY_ENGINE_VERSION # => "3.2.2"
RUBY_DESCRIPTION
Описание реализации Ruby:
RUBY_DESCRIPTION # => "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]"
Встроенные данные
DATA
Определяется только если в программе есть такая строка:
__END__
При определении, DATA — это объект File, содержащий строки, следующие за __END__, расположенный в начале этих строк:
p DATA
DATA.each_line { |line| p line }
__END__
Вывод:
#<File:t.rb> "Foo\n" "Bar\n" "Baz\n"
Ruby Core © 1993–2024 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.