预定义全局变量

一些预定义的全局变量可以通过模块 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#loadKernel#require 搜索的路径数组。

Singleton 方法 $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

其他变量

$-F

String#split 中的默认字段分隔符;必须是 StringRegexp,并且可以通过 命令行选项 -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 (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"