Ruby變量是用於保存在程序中使用的數據的位置。 每一個變量都有不一樣的名稱。 這些變量名稱基於一些命名約定。 不像其餘編程語言,在Ruby中沒必要先聲明變量再使用。 只須要一個前綴來指示它就能夠了。shell
Ruby中有四種類型的變量:編程
局部變量名以小寫字母或下劃線(_
)開頭。變量可在它的初始化塊內或範圍內訪問。代碼塊完成後,變量就不在做用域存在了。ruby
當未初始化的局部變量被調用時,它們被解釋爲對沒有參數的方法的調用。yii
類變量名以@@
符號開頭。須要在使用前進行初始化。 類變量屬於整個類,能夠從類中的任何位置訪問。 若是在一個實例中該值將被更改,則它將在每一個實例中被改變。編程語言
類變量由類的全部後代共享,未初始化的類變量將致使錯誤。code
示例:作用域
建立一個Ruby文件:class-variables.rb,編寫如下代碼 -get
#!/usr/bin/ruby class States @@no_of_states=0 def initialize(name) @states_name=name @@no_of_states += 1 end def display() puts "State name #@state_name" end def total_no_of_states() puts "Total number of states written: #@@no_of_states" end end # Create Objects first=States.new("Assam") second=States.new("Meghalaya") third=States.new("Maharashtra") fourth=States.new("Pondicherry") # Call Methods first.total_no_of_states() second.total_no_of_states() third.total_no_of_states() fourth.total_no_of_states()
在上面的例子中,@@no_of_states
是一個類變量。it
執行上面代碼,輸出結果以下:table
F:\worksp\ruby>ruby class-variables.rb Total number of states written: 4 Total number of states written: 4 Total number of states written: 4 Total number of states written: 4 F:\worksp\ruby>
實例變量名以@
符號開頭。 它屬於類的一個實例,能夠從方法中的類的任何實例訪問。 它們只能訪問一個特定的類的實例。
它們不須要初始化,未初始化的實例變量的值是:nil
。
示例:
建立一個Ruby文件:instance-variables.rb,編寫如下代碼 -
#!/usr/bin/ruby class States def initialize(name) @states_name=name end def display() puts "States name #@states_name" end end # Create Objects first=States.new("Hainan") second=States.new("GuangDong") third=States.new("Beijing") fourth=States.new("ShangDong") # Call Methods first.display() second.display() third.display() fourth.display()
執行上面代碼,輸出結果以下:
F:\worksp\ruby>ruby instance-variables.rb States name Hainan States name GuangDong States name Beijing States name ShangDong F:\worksp\ruby>
全局變量名以$
號開頭。在全局範圍內可訪問,能夠從程序中的任何位置訪問它。
未初始化的全局變量的值會被初始化爲:nil
。建議不要使用全局變量,由於它們使程序變得祕密和複雜。
Ruby中有一些預約義的全局變量。
示例:
建立一個Ruby文件:global-variables.rb,編寫如下代碼 -
#!/usr/bin/ruby $global_var = "GLOBAL" class One def display puts "Global variable in One is #$global_var" end end class Two def display puts "Global variable in Two is #$global_var" end end oneobj = One.new oneobj.display twoobj = Two.new twoobj.display
執行上面代碼,輸出結果以下:
F:\worksp\ruby>ruby global-variables.rb Global variable in One is GLOBAL Global variable in Two is GLOBAL F:\worksp\ruby>
如下是上面幾種類型變量的歸納 -
特性 | 局部變量 | 全局變量 | 實例變量 | 類變量 |
---|---|---|---|---|
範圍 | 僅限於初始化塊內 | 全局範圍 | 屬於一個類的一個實例 | 僅限於建立它們的整個類 |
命名約定 | 以小寫字母或下劃線(_ )開頭 |
以$ 符號開頭 |
以@ 符號開頭 |
以@@ 符號開頭 |
初始化 | 不須要初始化,未初始化的局部變量被解釋爲沒有參數的方法 | 不須要初始化,未初始化的全局變量的值爲:nil 。 |
不須要初始化,未初始化的實例變量的值爲:nil 。 |
須要在使用前進行初始化,未初始化的全局變量會致使錯誤。 |