Ruby之旅(15) Ruby中的三種變數一種常量和兩個偽變數

來源:互聯網
上載者:User
全域變數  $xx
物件變數 @xx
局部變數 [a-z]xx

常量 [A-Z]xx

兩個偽變數self和nil:
self實際上是一個指向當前對象的全域變數,這個變數的值由解譯器控制,我們只能讀取,不能修改。
nil也是一個由解譯器控制全域變數,不能進行賦值。

1. 全域變數 $xx
全域變數應該謹慎使用,因為它的範圍是指令碼級,在當前會話中的任何位置都可以改變。
全域變數在初始之前訪問的話 是nil
可以通過trace_var來監視全域變數的改變並綁定一個變數改變時做出響應的代碼塊。trace_var :$abc, proc{print "$abc is now #{$abc.to_s}\n"}

$abc = 2

上面就是使用trace_var註冊了一個$abc改變時的事件,對於這種作為過程激發器的全域變數在ruby中通常被稱為 活動變數 active variable。

還有一個特殊的全域變數,通常是系統變數,表示環境內容資訊的,列舉如下
$$ Ruby解譯器的進程ID
$! 最近一次錯誤資訊
$@ 錯誤產生的位置
$_ gets最近讀到的字串
$. 解譯器最近讀到的行數
$~ 子運算式組的最近一次匹配
$n 最近匹配的第n個子運算式
$= 是否區別大小寫標誌
$/ 輸入記錄分隔字元
$\ 輸出記錄分隔字元
$0 Ruby指令碼的檔案名稱
$* 命令列參數
$? 最近一次執行的子進程退出狀態

2 物件變數 @xx
物件變數的範圍在對象內部,初始之前訪問的話,會得到一個nil。
Ruby的物件變數使用之前不用聲明,直接使用即可,其實物件變數在第一次使用時被動態添加進對象,看下面的sample就知道了class Sample
    def setA
        @a = 1
    end
    def setB
        @b = 2
    end
    def show
        puts "print instance variables:"
        puts self.instance_variables
        puts "print end"
    end
end
s = Sample.new
s.show #none
s.setA
s.show #only have @a
s.setB
s.show #only @a and @b

3.局部變數 [a-z_]xx
 由小寫字母和底線開頭,在第一次賦值前並不包含nil值,第一次賦值就像是一次型別宣告,我想ruby解譯器也是根據第一次聲明來決定該變數的類型的。

局部變數的範圍是所在上下文

4 ruby的常量 [A-Z]xx

常量只能賦值一次,但Ruby目前的版本賦值多次只會產生警告。
常量可以定義在類和模組裡,可以通過::符訪問

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.