Ruby變量是用于保存在程序中使用的數(shù)據(jù)的位置。 每個(gè)變量都有不同的名稱憋他。 這些變量名稱基于一些命名約定孩饼。 不像其他編程語言,在Ruby中不必先聲明變量再使用竹挡。 只需要一個(gè)前綴來指示它就可以了镀娶。
Ruby中有四種類型的變量:
- 局部變量
- 類變量
- 實(shí)例變量
- 全局變量
1. 局部變量
局部變量名以小寫字母或下劃線(_
)開頭。變量可在它的初始化塊內(nèi)或范圍內(nèi)訪問揪罕。代碼塊完成后梯码,變量就不在作用域存在了。
當(dāng)未初始化的局部變量被調(diào)用時(shí)好啰,它們被解釋為對(duì)沒有參數(shù)的方法的調(diào)用轩娶。
2. 類變量
類變量名以@@
符號(hào)開頭。需要在使用前進(jìn)行初始化框往。 類變量屬于整個(gè)類鳄抒,可以從類中的任何位置訪問。 如果在一個(gè)實(shí)例中該值將被更改椰弊,則它將在每個(gè)實(shí)例中被改變嘁酿。
類變量由類的所有后代共享,未初始化的類變量將導(dǎo)致錯(cuò)誤男应。
示例:
創(chuàng)建一個(gè)Ruby文件:class-variables.rb,編寫以下代碼 -
#!/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
是一個(gè)類變量沐飘。
執(zhí)行上面代碼,輸出結(jié)果如下:
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>
3. 實(shí)例變量
實(shí)例變量名以@
符號(hào)開頭。 它屬于類的一個(gè)實(shí)例耐朴,可以從方法中的類的任何實(shí)例訪問借卧。 它們只能訪問一個(gè)特定的類的實(shí)例。
它們不需要初始化筛峭,未初始化的實(shí)例變量的值是:nil
铐刘。
示例:
創(chuàng)建一個(gè)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()
執(zhí)行上面代碼影晓,輸出結(jié)果如下:
F:\worksp\ruby>ruby instance-variables.rb
States name Hainan
States name GuangDong
States name Beijing
States name ShangDong
F:\worksp\ruby>
4. 全局變量
全局變量名以$
號(hào)開頭镰吵。在全局范圍內(nèi)可訪問,可以從程序中的任何位置訪問它挂签。
未初始化的全局變量的值會(huì)被初始化為:nil
疤祭。建議不要使用全局變量,因?yàn)樗鼈兪钩绦蜃兊妹孛芎蛷?fù)雜饵婆。
Ruby中有一些預(yù)定義的全局變量勺馆。
示例:
創(chuàng)建一個(gè)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
執(zhí)行上面代碼侨核,輸出結(jié)果如下:
F:\worksp\ruby>ruby global-variables.rb
Global variable in One is GLOBAL
Global variable in Two is GLOBAL
F:\worksp\ruby>
總結(jié)
以下是上面幾種類型變量的概括 -
特性 | 局部變量 | 全局變量 | 實(shí)例變量 | 類變量 |
---|---|---|---|---|
范圍 | 僅限于初始化塊內(nèi) | 全局范圍 | 屬于一個(gè)類的一個(gè)實(shí)例 | 僅限于創(chuàng)建它們的整個(gè)類 |
命名約定 | 以小寫字母或下劃線(_ )開頭 |
以$ 符號(hào)開頭 |
以@ 符號(hào)開頭 |
以@@ 符號(hào)開頭 |
初始化 | 不需要初始化草穆,未初始化的局部變量被解釋為沒有參數(shù)的方法 | 不需要初始化,未初始化的全局變量的值為:nil 搓译。 |
不需要初始化,未初始化的實(shí)例變量的值為:nil 悲柱。 |
需要在使用前進(jìn)行初始化,未初始化的全局變量會(huì)導(dǎo)致錯(cuò)誤。 |