Ruby中的全局變量

全局變量是可以從程序中的任何位置訪問(wèn)的變量,無(wú)論范圍如何。他們'用$(美元符號(hào))字符開(kāi)頭重新表示。然而,全局變量的使用通常被認(rèn)為是"un-Ruby,"你很少會(huì)看到它們。

定義全局變量

全局變量的定義和使用與任何其他變量一樣。要定義它們,只需為它們分配一個(gè)值并開(kāi)始使用它們。但是,正如他們的名字所暗示的那樣,從程序中的任何一點(diǎn)分配給全局變量都具有全局意義。以下程序演示了這一點(diǎn)。該方法將修改全局變量,這將影響方法的運(yùn)行方式。

 $速度=10def加速$速度=100結(jié)束def通過(guò)?速度?陷阱如果$speed>65#給這個(gè)計(jì)劃一張超速票結(jié)束結(jié)束加快通過(guò)速度陷阱

不受歡迎

那么為什么這個(gè)"聯(lián)合國(guó)紅寶石"為什么你經(jīng)??吹饺肿兞??簡(jiǎn)而言之,它打破了封裝。如果任何一個(gè)類或方法可以隨意修改全局變量的狀態(tài)而沒(méi)有接口層,則依賴于該全局變量的任何其他類或方法可能以意想不到的方式表現(xiàn)。此外,這種交互可能非常難以調(diào)試。什么修改了這個(gè)全局變量,什么時(shí)候?您'將查看相當(dāng)多的代碼以找到它是做什么的,并且可以通過(guò)不違反封裝規(guī)則來(lái)避免。

但那'并不是說(shuō)全局變量從不生活知識(shí)科普用于Ruby。有許多特殊的全局變量具有單個(gè)字符名(a-la Perl),可以在整個(gè)程序中使用。它們代表程序本身的狀態(tài),并為所有gets方法修改記錄和字段分隔符等操作。

全局變量

  • $0-此變量由$0(that's為零)表示的able保留正在執(zhí)行的頂層腳本的名稱。換句話說(shuō),從命令行運(yùn)行的腳本文件,而不是保存當(dāng)前執(zhí)行代碼的腳本文件。因此,如果從命令行運(yùn)行script1.rb,則它將保持script1.rb。如果此腳本需要script2.rb,則該腳本文件中的$0也將是script1.rb。名稱$0反映了UNIX shell腳本中用于相同目的的命名約定。
  • $*-數(shù)組中的命令行參數(shù)由$*(美元符號(hào)和星號(hào))表示。例如,如果要運(yùn)行/script.rbarg1 arg2,則$*等于%w{arg1 arg2}。這相當(dāng)于特殊的ARGV數(shù)組,描述性名稱較少,因此很少使用。
  • $$-解釋器's進(jìn)程ID,用$$表示(兩美元的符號(hào))。了解一個(gè)'自己的進(jìn)程ID在daemon程序(在背景中運(yùn)行,與任何終端無(wú)關(guān))或系統(tǒng)服務(wù)中通常很有用。但是,當(dāng)涉及線程時(shí),這會(huì)變得更加復(fù)雜,所以要小心盲目使用它。
  • $/和$\-這些是輸入和輸出記錄分隔符。當(dāng)您使用get讀取對(duì)象并使用put打印對(duì)象時(shí),它使用這些來(lái)知道何時(shí)讀取完整的"記錄"或在多個(gè)記錄之間打印什么。默認(rèn)情況下,這些應(yīng)該是newline字符。但由于這些會(huì)影響所有IO對(duì)象的行為,因此它們'如果有的話,很少使用。您可以在較小的腳本中看到它們,其中打破封裝規(guī)則不是問(wèn)題。
  • $?-執(zhí)行的最后一個(gè)子過(guò)程的退出狀態(tài)。在這里列出的所有變量中,這可能是最有用的。其原因很簡(jiǎn)單:您可以通過(guò)系統(tǒng)方法中的返回值獲取子進(jìn)程的退出狀態(tài),只有真或假。如果你必須知道實(shí)際的回報(bào)子過(guò)程的價(jià)值,您需要使用這個(gè)特殊的全局變量。同樣,這個(gè)變量的名稱取自UNIX shell。
  • $82>-最后一個(gè)由讀取的字符串得到。對(duì)于那些從Perl來(lái)到Ruby的人來(lái)說(shuō),這個(gè)變量可能會(huì)引起混淆。在Perl中,$_variable意味著類似但完全不同的東西。在Perl中,$?保留last語(yǔ)句的值,在Ruby中保留前一個(gè)get調(diào)用返回的字符串。它們的用法是相似的,但它們真正持有的是非常不同的。你也經(jīng)??吹竭@個(gè)變量(想到它,你很少看到任何這些變量),但是你可能會(huì)在處理文本的非常短的Ruby程序中看到它們。

簡(jiǎn)而言之,你很少看到全局變量。他們'經(jīng)常是不好的形式(和"聯(lián)合紅寶石"),并且只適用于非常小的腳本,在這些腳本中可以充分理解其使用的全部含義。可以使用一些特殊的全局變量,但在大多數(shù)情況下,它們都是't使用的。你確實(shí)需要了解所有關(guān)于全局變量的知識(shí)來(lái)理解大多數(shù)紅寶石程序,但你至少應(yīng)該知道它們'在那里。

教育_1