全局變量由$開頭.它們可以在程序的任何位置訪問到.在初始化前,全局變量有一個特殊的值?nil.
ruby>?$foo
???nil
ruby>?$foo?=?5
???5
ruby>?$foo
???5?
應(yīng)謹(jǐn)慎使用全局變量.由于在任何地方都可以被寫因此他們相當(dāng)危險.濫用全局變量會導(dǎo)致很難隔離臭蟲;同時也視為程序的設(shè)計未經(jīng)嚴(yán)格考慮.當(dāng)你發(fā)現(xiàn)必須要使用全局變量時,記得給它一個不會在其它地方一不小心就用到的描述性名字(像上面那樣叫$foo可能不是一個好想法).
全局變量的好處是其可以被跟蹤;你可以做一個當(dāng)變量值改變時被調(diào)用的過程.
ruby>?trace_var?:$x,?proc{print?"$x?is?now?",?$x,?"\n"}
???nil
ruby>?$x?=?5
$x?is?now?5
???5?
當(dāng)一個全局變量(改變時)作為一個過程的激發(fā)器,我們也管它叫活動變量(active?variable).比如說,它可用于保持GUI顯示的更新.
這里列出了一些以$打頭并跟單個字符的特殊變量.比如,$$包含了Ruby解釋器的進(jìn)程id,它是只讀的.這里是主要的系統(tǒng)變量以及它們的含義(細(xì)節(jié)可在Ruby的參考手冊中查到):
$!??最近一次的錯誤信息?
$@??錯誤產(chǎn)生的位置?
$_??gets最近讀的字符串??
$.??解釋器最近讀的行數(shù)(line?number)?
$&??最近一次與正則表達(dá)式匹配的字符串?
$~??作為子表達(dá)式組的最近一次匹配??
$n??最近匹配的第n個子表達(dá)式(和$~[n]一樣)??
$=??是否區(qū)別大小寫的標(biāo)志??
$/??輸入記錄分隔符?
$\??輸出記錄分隔符?
$0??Ruby腳本的文件名?
$*??命令行參數(shù)?
$$??解釋器進(jìn)程ID?
$???最近一次執(zhí)行的子進(jìn)程退出狀態(tài)?
上面的?$_?和?$~?都有作用范圍.它們的名字暗示其為全局的,但它們一般都是這樣用的,關(guān)于它們的命名有歷史上的原因.
版權(quán)聲明:RUBY文檔中心的所有文章標(biāo)明[原創(chuàng)]的均為本站作品,版權(quán)屬RUBY中文化計劃,若轉(zhuǎn)載請注明;標(biāo)明[翻譯]的其外文版權(quán)歸原作者,譯文版權(quán)屬RUBY中文化計劃;標(biāo)明[轉(zhuǎn)貼]的,若原作者感到侵犯了他的著作權(quán),那么請及時跟主持人聯(lián)系,我們會盡快更正。
?