Ruby 使用手冊

全域變數 Global variables

全域變數以 $ 開頭, 可從程式中任何地方開始。初始化前,全域變數有一個特別的值--nil

ruby> $foo
   nil
ruby> $foo = 5
   5
ruby> $foo
   5

應儘量少用全域變數, 因為全域變數能夠編寫於任何地方,所以相對危險。過量使用全域變數會令人難以找出錯誤,也會讓人覺得程式設計並沒經過深思熟慮。如果一定要使用全域變數,請記得指定一個描述性名稱 (descriptive name),以防之後重複使用該名稱(以上例子中的 $foo 並不是好的示範)。

全域變數其中一個優點就是能夠追蹤,每當變數的值改變後,你都能夠指出呼叫出的程序。

ruby> trace_var :$x, Proc.new { puts "$x is now #{$x}" }
   nil
ruby> $x = 5
$x is now 5
   5

當全域變數改變後,就會用作呼叫程序的觸發器 (trigger),有時會稱之為活躍變數 (active variable)。例如,可用於為圖形使用者介面 (GUI) 保持最新狀態。

以下是一系列由 $ 開頭的特別變數, 例如 $$ 包含 Ruby 直譯器的進程識別字 (process id),只能讀取。這些都是主要的系統變數:

$! 最新的錯誤訊息
$@ 錯誤的位置
$_ gets 最後讀取的子串
$. 直譯器最後讀取的行
$& 正規表示式 (regexp) 最後符合的字串
$~ 最後的正規表示式符合內容,子表示式 (subexpression) 的陣列
$n 最後符合內容的第 n 項子表示式(同 $~[n])。
$= 不區分大小寫旗標
$/ 輸入記錄分隔字元
$\ 輸出記錄分隔字元
\$0 Ruby 腳本檔案的名稱
$* 命令列引數
$$ 直譯器的進程識別字 (process id)
$? 離開最後執行的子進程 (child process) 狀態

以上的 $_$~ 具有區域作用域 (local scope), 他們的名稱看起來是全域變數,但這樣比較有用,而且使用這樣的名稱也有其歷史因素。

Copyright (c) 2005-2008 Mark Slagell,中文翻譯 Ruby Taiwan 社群

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.

A copy of the license is included in the section entitled "GNU Free Documentation License."