预定义的全局变量

一些预定义的全局变量可以通过模块 English 使用同义词。对于每个变量,都会给出英语同义词。

要使用模块

require 'English'

异常

$! (异常)

包含由 Kernel#raise 设置的 Exception 对象

begin
  raise RuntimeError.new('Boo!')
rescue RuntimeError
  p $!
end

输出

#<RuntimeError: Boo!>

英语 - $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'"]

英语 - $ERROR_POSITION

模式匹配

这些全局变量存储有关当前作用域中最近一次成功匹配的信息。

有关详细信息和示例,请参阅正则表达式全局变量

$~ (MatchData)

从匹配创建的 MatchData 对象;线程本地和帧本地。

英语 - $LAST_MATCH_INFO

$& (匹配的子字符串)

匹配的字符串。

英语 - $MATCH

$` (匹配前的子字符串)

匹配左侧的字符串。

英语 - $PREMATCH

$' (匹配后的子字符串)

匹配右侧的字符串。

英语 - $POSTMATCH

$+ (最后匹配的组)

最后匹配的组。

英语 - $LAST_PAREN_MATCH

$1, $2, 等 (匹配的组)

对于 $n,匹配的第 n 个组。

没有英语。

分隔符

$/ (输入记录分隔符)

输入记录分隔符,初始为换行符。

英语 - $INPUT_RECORD_SEPARATOR, $RS

别名为 $-0

$\ (输出记录分隔符)

输出记录分隔符,初始为 nil

英语 - $OUTPUT_RECORD_SEPARATOR, $ORS

$stdin (标准输入)

当前标准输入流;初始为

$stdin # => #<IO:<STDIN>>

$stdout (标准输出)

当前标准输出流;初始为

$stdout # => #<IO:<STDOUT>>

$stderr (标准错误)

当前标准错误流;初始为

$stderr # => #<IO:<STDERR>>

$< (ARGF 或 $stdin)

如果 ARGF 不为空,则指向流 ARGF,否则指向流 $stdin;只读。

英语 - $DEFAULT_INPUT

$> (默认标准输出)

一个输出流,初始为 $stdout

英语 - <tt>$DEFAULT_OUTPUT

$. (输入位置)

最近读取的流中的输入位置(行号)。

英语 - $INPUT_LINE_NUMBER, $NR

$_ (最后读取的行)

来自最近读取的流的行(字符串)。

英语 - $LAST_READ_LINE

进程

$0

初始包含正在执行的脚本的名称;可以重新赋值。

$* (ARGV)

指向 ARGV。

英语 - $ARGV

$$ (Process ID)

当前进程的进程 ID。与 Process.pid 相同。

英语 - $PROCESS_ID, $PID

$? (子进程状态)

初始为 nil,否则为最近退出的子进程创建的 Process::Status 对象;线程本地。

英语 - $CHILD_STATUS

$LOAD_PATH (加载路径)

包含由 Kernel#loadKernel#require 搜索的路径数组。

单例方法 $LOAD_PATH.resolve_feature_path(feature) 返回

示例

$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

如果给出了命令行选项 -d--debug,则初始为 true,否则初始为 false;可以在运行程序中设置为任意值。

true 时,将每个引发的异常打印到 $stderr

别名为 $-d

$VERBOSE

如果给出了命令行选项 -v-w,则初始为 true,否则初始为 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 读取,如果给出 "-",或者在读取完所有文件后也会从 $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

此 Ruby 的 git commit 哈希值

RUBY_REVISION # => "e51014f9c05aa65cbf203442d37fef7c12390015"

版权字符串

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"