全域變數以 $
開頭, 可從程式中任何地方開始。初始化前,全域變數有一個特別的值--nil
。
nil
ruby> $foo = 5
5
ruby> $foo
5
應儘量少用全域變數, 因為全域變數能夠編寫於任何地方,所以相對危險。過量使用全域變數會令人難以找出錯誤,也會讓人覺得程式設計並沒經過深思熟慮。如果一定要使用全域變數,請記得指定一個描述性名稱 (descriptive name),以防之後重複使用該名稱(以上例子中的 $foo
並不是好的示範)。
全域變數其中一個優點就是能夠追蹤,每當變數的值改變後,你都能夠指出呼叫出的程序。
nil
ruby> $x = 5
$x is now 5
5
當全域變數改變後,就會用作呼叫程序的觸發器 (trigger),有時會稱之為活躍變數 (active variable)。例如,可用於為圖形使用者介面 (GUI) 保持最新狀態。
以下是一系列由 $
開頭的特別變數, 例如 $$
包含 Ruby 直譯器的進程識別字 (process id),只能讀取。這些都是主要的系統變數:
$! | 最新的錯誤訊息 |
[email protected] | 錯誤的位置 |
$_ | gets 最後讀取的子串 |
$. | 直譯器最後讀取的行數 |
$& | 正規表示式 (regexp) 最後符合的字串 |
$~ | 最後的正規表示式符合內容,子表示式 (subexpression) 的陣列 |
$ n | 最後符合內容的第 n 項子表示式(同 $~[ n] )。 |
$= | 不區分大小寫旗標 |
$/ | 輸入記錄分隔字元 |
$\ | 輸出記錄分隔字元 |
\$0 | Ruby 腳本檔案的名稱 |
$* | 命令列引數 |
$$ | 直譯器的進程識別字 (process id) |
$? | 離開最後執行的子進程 (child process) 狀態 |
以上的 $_
與 $~
具有區域作用域 (local scope), 他們的名稱看起來是全域變數,但這樣比較有用,而且使用這樣的名稱也有其歷史因素。