预定义全局变量
一些预定义的全局变量可以通过模块 English 访问其同义词。对于这些变量,会给出英文同义词。
使用模块
require 'English'
简而言之
异常
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$! |
$ERROR_INFO |
异常对象或 nil |
nil |
是 | Kernel#raise |
$@ |
$ERROR_POSITION |
回溯位置数组或 nil |
nil |
是 | Kernel#raise |
匹配数据
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$~ |
$LAST_MATCH_INFO |
MatchData 对象或 nil |
nil |
否 | 匹配方法 |
$& |
$MATCH |
匹配到的子字符串或 nil |
nil |
否 | 匹配方法 |
$` |
$PRE_MATCH |
匹配前的子字符串或 nil |
nil |
否 | 匹配方法 |
$' |
$POST_MATCH |
匹配后的子字符串或 nil |
nil |
否 | 匹配方法 |
$+ |
$LAST_PAREN_MATCH |
最后匹配的分组或 nil |
nil |
否 | 匹配方法 |
$1 |
第一个匹配的分组或 nil |
nil |
是 | 匹配方法 | |
$2 |
第二个匹配的分组或 nil |
nil |
是 | 匹配方法 | |
$n |
第 n 个匹配的分组或 nil |
nil |
是 | 匹配方法 |
分隔符
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$/, $-0 |
$INPUT_RECORD_SEPARATOR |
输入记录分隔符 | 换行符 | 否 | |
$\ |
$OUTPUT_RECORD_SEPARATOR |
输出记录分隔符 | nil |
否 |
流
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$stdin |
标准输入流 | STDIN |
否 | ||
$stdout |
标准输出流 | STDOUT |
否 | ||
$stderr |
标准错误流 | STDERR |
否 | ||
$< |
$DEFAULT_INPUT |
默认标准输入 | ARGF |
是 | |
$> |
$DEFAULT_OUTPUT |
默认标准输出 | STDOUT |
否 | |
$. |
$INPUT_LINE_NUMBER, $NR |
最近读取流的输入位置 | 0 | 否 | 某些读取方法 |
$_ |
$LAST_READ_LINE |
来自最近读取流的 String |
nil |
否 | 某些读取方法 |
进程
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$0, $PROGRAM_NAME |
程序名称 | 程序名称 | 否 | ||
$* |
$ARGV |
ARGV 数组 | ARGV |
是 | |
$$ |
$PROCESS_ID, $PID |
进程 ID | 进程 PID | 是 | |
$? |
$CHILD_STATUS |
最近退出的子进程状态 | nil |
是 | |
$LOAD_PATH, $:, $-I |
搜索路径数组 | Ruby 默认值 | 是 | ||
$LOADED_FEATURES, $" |
加载路径数组 | Ruby 默认值 | 是 |
调试
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$FILENAME |
方法 ARGF.filename 返回的值 |
命令行参数或 ‘-’ | 是 | ||
$DEBUG |
是否给定了选项 -d 或 --debug |
命令行选项 | 否 | ||
$VERBOSE |
是否给定了选项 -V 或 -W |
命令行选项 | 否 |
其他变量
| 变量 | English | 包含 | 初始值 | 只读 | 重置方式 |
|---|---|---|---|---|---|
$-F, $; |
通过命令行选项 -F 指定的分隔符 |
||||
$-a |
是否给定了选项 -a |
是 | |||
$-i |
通过命令行选项 -i 指定的扩展名 |
否 | |||
$-l |
是否给定了选项 -l |
是 | |||
$-p |
是否给定了选项 -p |
是 | |||
$F |
$_ 按 $-F 分割的数组 |
异常
$! (异常)
包含由 Kernel#raise 设置的 Exception 对象
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。
匹配数据
这些全局变量存储有关当前作用域中最近一次成功匹配的信息。
有关详细信息和示例,请参阅 Regexp 全局变量。
$~ (MatchData)
匹配生成的 MatchData 对象;线程局部和帧局部。
English - $LAST_MATCH_INFO。
$& (匹配的子字符串)
匹配的字符串。
English - $MATCH。
$` (匹配前的子字符串)
匹配左侧的字符串。
English - $PREMATCH。
$' (匹配后的子字符串)
匹配右侧的字符串。
English - $POSTMATCH。
$+ (最后匹配的分组)
最后匹配的分组。
English - $LAST_PAREN_MATCH。
$1, $2, 等 (匹配的分组)
对于 $n,表示匹配的第 n 个分组。
无英文同义词。
分隔符
$/ (输入记录分隔符)
输入记录分隔符,初始值为换行符。由 命令行选项 -0 设置。
通过命令行选项以外的方式将其设置为非 nil 值已弃用。
English - $INPUT_RECORD_SEPARATOR, $RS。
别名为 $-0。
$\ (输出记录分隔符)
输出记录分隔符,初始值为 nil。
当给出 命令行选项 -l 时,从 $/ 复制而来。
通过命令行选项以外的方式将其设置为非 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 - $DEFAULT_OUTPUT
$. (输入位置)
最近读取流的输入位置(行号)。
English - $INPUT_LINE_NUMBER, $NR
$_ (最后读取的行)
来自最近读取流的行(字符串)。
English - $LAST_READ_LINE。
进程
$0
初始时,包含正在执行的脚本的名称;可重新赋值。
$* (ARGV)
指向 ARGV。
English - $ARGV。
$$ (进程 ID)
当前进程的进程 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是要为给定feature加载的 Ruby 文件路径。 -
[:so, path],其中path是要为给定feature加载的共享对象文件路径。 -
如果不存在这样的
feature和path,则返回nil。
示例
$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。
其他变量
$-F
String#split 中的默认字段分隔符;必须是 String 或 Regexp,并且可以通过 命令行选项 -F 设置。
通过命令行选项以外的方式将其设置为非 nil 值已弃用。
别名为 $;。
$-a
是否给定了 命令行选项 -a;只读。
$-i
包含通过 命令行选项 -i 指定的扩展名,如果没有则为 nil。
ARGF.inplace_mode 的别名。
$-l
是否设置了 命令行选项 -l;只读。
$-p
是否给定了 命令行选项 -p;只读。
$F
如果给定了 命令行选项 -a,则在每次 -l/-p 循环开始时,将 $_ 按 $-F 分割得到的数组赋值给 $F。
已弃用
$=
$,
预定义全局常量
摘要
流
| 常量 | 包含 |
|---|---|
STDIN |
标准输入流。 |
STDOUT |
标准输出流。 |
STDERR |
标准错误流。 |
环境
| 常量 | 包含 |
|---|---|
ENV |
当前环境变量名和值的 Hash。 |
ARGF |
命令行文件中指定的文件的 String 串联,如果没有则为 $stdin。 |
ARGV |
给定的命令行参数的 Array。 |
TOPLEVEL_BINDING |
顶层作用域的 Binding。 |
RUBY_VERSION |
Ruby 版本的 String。 |
RUBY_RELEASE_DATE |
Ruby 发布日期的 String。 |
RUBY_PLATFORM |
Ruby 平台的 String。 |
RUBY_PATCH_LEVEL |
Ruby 补丁级别的 String。 |
RUBY_REVISION |
Ruby 修订版本的 String。 |
RUBY_COPYRIGHT |
Ruby 版权的 String。 |
RUBY_ENGINE |
Ruby 引擎名称的 String。 |
RUBY_ENGINE_VERSION |
Ruby 引擎版本的 String。 |
RUBY_DESCRIPTION |
Ruby 描述的 String。 |
嵌入数据
| 常量 | 包含 |
|---|---|
DATA |
包含嵌入数据(`__END__` 之后的行,如果有的话)的 File。 |
流
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
此 Ruby 的 git 提交哈希
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"