預定義的全局變數

有些預定義的全局變數有同義詞,可透過模組 Engish 使用。對於每個同義詞,都會提供英文同義詞。

若要使用模組

require 'English'

例外

$! (Exception)

包含由 Kernel#raise 設定的 Exception 物件

begin
  raise RuntimeError.new('Boo!')
rescue RuntimeError
  p $!
end

輸出

#<RuntimeError: Boo!>

English - $ERROR_INFO

$@ (Backtrace)

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

$& (Matched Substring)

配對的字串。

English - $MATCH.

$` (Pre-Match Substring)

比對左方的字串。

英文 - $PREMATCH

$' (比對後子字串)

比對右方的字串。

英文 - $POSTMATCH

$+ (最後比對到的群組)

最後比對到的群組。

英文 - $LAST_PAREN_MATCH

$1$2 等(比對到的群組)

對於 $nnth 為比對到的群組。

無英文。

分隔符號

$/ (輸入記錄分隔符號)

輸入記錄分隔符號,最初為換行符。

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

$$ (程序 ID)

目前程序的程序 ID。與 Process.pid 相同。

英文 - $PROCESS_ID, $PID

$? (子狀態)

最初為 nil,否則為為最近結束的子程序建立的 Process::Status 物件;執行緒區域。

英文 - $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 commit hash

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__

定義時,DATAFile 物件,包含 __END__ 之後、位於那些行第一個位置的行

p DATA
DATA.each_line { |line| p line }
__END__

輸出

#<File:t.rb>
"Foo\n"
"Bar\n"
"Baz\n"