预定义全局变量

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

要使用该模块

require 'English'

异常

$! (异常)

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

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

英文 - $FIELD_SEPARATOR, $FS

别名为 $-F

$\ (输出记录分隔符)

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

英文 - $OUTPUT_RECORD_SEPARATOR, $ORS

$stdin (标准输入)

当前标准输入流;最初

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

$stdout (标准输出)

当前标准输出流;最初

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

$stderr (标准错误)

当前标准错误流;最初

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

$< (ARGF 或 $stdin)

指向流 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给出的文件的虚拟连接,如果没有给出文件,则给出"-",或者在所有文件都已读取后。

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"