解析ruby的全域變數

來源:互聯網
上載者:User

全域變數由$開頭.它們可以在程式的任何位置訪問到.在初始化前,全域變數有一個特殊的值 nil.

ruby> $foonilruby> $foo = 55ruby> $foo5

應謹慎使用全域變數.由於在任何地方都可以被寫因此他們相當危險.濫用全域變數會導致很難隔離臭蟲;同時也視為程式的設計未經嚴格考慮.當你發現必須要使用全域變數時,記得給它一個不會在其它地方一不小心就用到的描述性名字(像上面那樣叫$foo可能不是一個好想法).

全域變數的好處是其可以被跟蹤;你可以做一個當變數值改變時被調用的過程.

ruby> trace_var :$x, proc{print "$x is now ", $x, "\n"}nilruby> $x = 5$x is now 55

當一個全域變數(改變時)作為一個過程的激發器,我們也管它叫活動變數(active variable).比如說,它可用於保持GUI顯示的更新.

這裡列出了一些以$打頭並跟單個字元的特殊變數.比如,$$包含了Ruby解譯器的進程id,它是唯讀.這裡是主要的系統變數以及它們的含義(細節可在Ruby的參考手冊中查到):

$! 最近一次的錯誤資訊

$@ 錯誤產生的位置

$_ gets最近讀的字串

$. 解譯器最近讀的行數(line number)

$& 最近一次與Regex匹配的字串

$~ 作為子運算式組的最近一次匹配

$n 最近匹配的第n個子運算式(和$~[n]一樣)

$= 是否區別大小寫標誌

$/ 輸入記錄分隔字元

$\ 輸出記錄分隔字元

$0 Ruby指令碼的檔案名稱

$* 命令列參數

$$ 解譯器進程ID

$? 最近一次執行的子進程退出狀態

上面的 $_ 和 $~ 都有作用範圍.它們的名字暗示其為全域的,但它們一般都是這樣用的,關於它們的命名有曆史上的原因.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.