Ruby變量

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ò)誤。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末侥衬,一起剝皮案震驚了整個(gè)濱河市诗祸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌轴总,老刑警劉巖直颅,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異怀樟,居然都是意外死亡功偿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門往堡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來械荷,“玉大人,你說我怎么就攤上這事虑灰《窒梗” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵穆咐,是天一觀的道長颤诀。 經(jīng)常有香客問我字旭,道長,這世上最難降的妖魔是什么崖叫? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任遗淳,我火速辦了婚禮,結(jié)果婚禮上心傀,老公的妹妹穿的比我還像新娘屈暗。我一直安慰自己,他們只是感情好脂男,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布养叛。 她就那樣靜靜地躺著,像睡著了一般疆液。 火紅的嫁衣襯著肌膚如雪一铅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天堕油,我揣著相機(jī)與錄音潘飘,去河邊找鬼。 笑死掉缺,一個(gè)胖子當(dāng)著我的面吹牛卜录,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播眶明,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼艰毒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了搜囱?” 一聲冷哼從身側(cè)響起丑瞧,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蜀肘,沒想到半個(gè)月后绊汹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扮宠,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年西乖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坛增。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡获雕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出收捣,到底是詐尸還是另有隱情届案,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布罢艾,位于F島的核電站楣颠,受9級(jí)特大地震影響嫁乘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜球碉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仓蛆。 院中可真熱鬧睁冬,春花似錦、人聲如沸看疙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽能庆。三九已至施禾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間搁胆,已是汗流浹背弥搞。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渠旁,地道東北人攀例。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像顾腊,于是被迫代替她去往敵國和親粤铭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 關(guān)于變量和方法的二義性辯論 首先先看個(gè)類 兩個(gè)疑問1杂靶、為啥 ‘1’處會(huì)有輸出梆惯,但是‘4’處沒有輸出?2吗垮、為啥 ‘2...
    AQ王浩閱讀 463評(píng)論 0 2
  • 局部變量:以英文字母或_開頭 全局變量:以$開頭 實(shí)例變量:以@開頭 類變量:以@@開頭 常量:以英文大寫字母開頭...
    安于然閱讀 475評(píng)論 0 0
  • 這個(gè)月和小伙伴們一起讀了洛里?斯皮爾曼著垛吗,吳春玲,薛雨辰譯的《生命清單》抱既。感覺收獲很大职烧,而且在臨近年尾之際更有實(shí)際...
    慧眼識(shí)魚閱讀 1,322評(píng)論 2 10
  • 歲月不待人蚀之,及時(shí)當(dāng)勉勵(lì)。時(shí)間是什么捷泞?時(shí)間就是你站在虛掩的門后足删,看著駿馳的白馬,穿越這道門隙锁右。等你緩過神來失受,它已經(jīng)不...
    人在南京閱讀 342評(píng)論 0 2
  • 早上在朋友圈看到了一位朋友完成了她的第二個(gè)90計(jì)劃拂到,她說沒有第一個(gè)完成時(shí)那樣有有驚喜感痪署,但還是很有成就。 想到自己...
    heureusefay閱讀 200評(píng)論 0 0