预定义全局变量¶ ↑
一些预定义的全局变量有同义词,可以通过模块 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#load
和 Kernel#require
搜索的路径数组。
单例方法 $LOAD_PATH.resolve_feature_path(feature)
返回
-
[:rb, path]
,其中path
是要为给定feature
加载的 Ruby 文件的路径。 -
[:so+ path]
,其中path
是要为给定feature
加载的共享对象文件的路径。 -
nil
如果没有这样的feature
和path
。
示例
$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 # => "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"