预定义全局变量

一些预定义全局变量具有可通过模块 Engish 使用的同义词。对于其中每一个,都给出了英文同义词。

要使用模块

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.

模式匹配

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

有关详细信息和示例,请参阅 Regexp 全局变量

$~(匹配数据)

从匹配创建的 MatchData 对象;线程局部和帧局部。

English - $LAST_MATCH_INFO.

$&(匹配子字符串)

匹配的字符串。

English - $MATCH.

$`(匹配前子字符串)

匹配左侧的字符串。

English - $PREMATCH.

$'(匹配后子字符串)

匹配右侧的字符串。

English - $POSTMATCH.

$+(上次匹配的组)

上次匹配的组。

英文 - $LAST_PAREN_MATCH

$1$2 等(匹配的组)

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

无英文。

分隔符

$/(输入记录分隔符)

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

英文 - $INPUT_RECORD_SEPARATOR$RS

别名为 $-0

$;(输入字段分隔符)

输入字段分隔符,最初为 nil

英文 - $FIELD_SEPARATOR$FS

别名为 $-F

$\(输出记录分隔符)

输出记录分隔符,最初为 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。

English - $ARGV

$$ (Process 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

其他变量

$-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

此 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"