濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別

Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別

熱門(mén)標(biāo)簽:地圖標(biāo)注大廈 個(gè)人怎么在地圖標(biāo)注需要的店鋪 武漢外呼防封系統(tǒng)多少錢(qián) 百度地圖標(biāo)注早餐區(qū)域 新岸線智能電銷機(jī)器人 怎么去除地圖標(biāo)注 漳州智云呼電話機(jī)器人 清朝地圖標(biāo)注哈爾濱 冀州市地圖標(biāo)注

在Ruby中類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別比較微妙,而且用法也有相當(dāng)?shù)膮^(qū)別。本文探討一下他們的定義和基本的使用場(chǎng)景,以拋磚引玉...
 
一.類實(shí)例變量和類變量
 
類變量大家都很熟悉了,就是在類定義中用@@開(kāi)頭的變量。類變量是用于存儲(chǔ)類的全局信息,它只屬于類,不同與類實(shí)例變量(即用@開(kāi)頭定義的變量)每一個(gè)類的對(duì)象都有一份數(shù)據(jù)。 類變量是可以被繼承的,也就是說(shuō)如果我們派生一個(gè)子類,那么在子類中是可以訪問(wèn)父類的類變量的。子類和父類共享一份數(shù)據(jù),對(duì)一個(gè)類的修改會(huì)反映到另一個(gè)類中。如下邊的代碼運(yùn)行結(jié)果顯示:

復(fù)制代碼 代碼如下:

class A 
   #類變量在訪問(wèn)前必須賦值,否則會(huì)有"uninitialized class variable“ 錯(cuò)誤 
  @@alpha=123                # Initialize @@alpha 
  @@beta=456                 #Initialize @@beta 
  @@gamma=789              #Initialize @@gamma 
  
  def A.alpha 
    @@alpha 
  end  
  
  def A.alpha=(x) 
    @@alpha=x 
  end 
  
  def A.beta 
    @@beta 
  end 
  
  def A.beta=(x) 
     @@beta=x 
  end  
   
  def A.gamma 
   @@gamma 
  end 
  
  def A.gamma=(x) 
    @@gamma=x 
  end  
  def A.look 
    puts "#@@alpha, #@@beta, #@@gamma" 
  end 
  end 
 
 
class BA   
end 
 
#初始的數(shù)據(jù) 
A.look 
B.look 
 
#修改父類中的類變量 
A.alpha=111 
A.look 
B.look 
 
 
運(yùn)行結(jié)果: 
復(fù)制代碼 代碼如下:

123, 456, 789 
123, 456, 789 
111, 456, 789 
111, 456, 789 

那么什么是類的類實(shí)例變量呢?類的類實(shí)例變量是在類的類方法中或方法外邊(不能在實(shí)例方法中,那是類的實(shí)例變量)以@開(kāi)頭定義的變量,這樣定義的變量值屬于類對(duì)象本身,不能夠被子類繼承。類對(duì)象這個(gè)說(shuō)法可能有些讓人疑惑,其實(shí)Ruby中的一起都是對(duì)象,我們定義的類和Ruby的內(nèi)置類本身就是元類的對(duì)象。因此如果要定義需要和子類共享的類全局?jǐn)?shù)據(jù),使用類變量;但是如果要定義僅供類本身使用的類全局?jǐn)?shù)據(jù)可以使用類實(shí)例變量。還有一點(diǎn)需要注意的是,和類變量不同的是類實(shí)例變量不要求訪問(wèn)前必須賦值,不賦值它的值就是nil 。我們還是看一個(gè)例子,能夠更清楚一點(diǎn)...
 

復(fù)制代碼 代碼如下:

class A 
   #類的類實(shí)例變量在訪問(wèn)前可以賦值也可以不賦值,不賦值就是nil 
  @alpha=123              # Initialize @alpha 
  @beta=456                #Initialize @beta 
  @gamma=789             #Initialize @gamma 
  
  def A.alpha 
    @alpha 
  end  
  
  def A.alpha=(x) 
    @alpha=x 
  end 
  
  def A.beta 
    @beta 
  end 
  
  def A.beta=(x) 
     @beta=x 
  end  
   
  def A.gamma 
   @gamma 
  end 
  
  def A.gamma=(x) 
    @gamma=x 
  end  
  def A.look 
    puts "#@alpha, #@beta, #@gamma" 
  end 
  end 
 
 
class BA   
end 
 
A.look 
B.look 

代碼的運(yùn)行結(jié)果如下:
復(fù)制代碼 代碼如下:

123, 456, 789
, ,
nil

您可能感興趣的文章:
  • 詳解Ruby中的單件方法和單件類
  • Ruby面向?qū)ο缶幊讨蓄惻c方法的基礎(chǔ)學(xué)習(xí)
  • Ruby中的Proc類及Proc的類方法Proc.new的使用解析
  • Ruby面向?qū)ο缶幊讨蓄惖姆椒ㄅc類的擴(kuò)展

標(biāo)簽:濰坊 儋州 金昌 德宏 宣城 天門(mén) 臺(tái)灣 天門(mén)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別》,本文關(guān)鍵詞  Ruby,類,實(shí)例,變量,方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    星座| 武冈市| 柘城县| 绥宁县| 齐齐哈尔市| 保康县| 赤城县| 独山县| 潜山县| 沙湾县| 临沧市| 探索| 禄劝| 普安县| 崇义县| 吉木萨尔县| 梅州市| 肇州县| 缙云县| 临湘市| 天祝| 玉山县| 无极县| 巴青县| 镇巴县| 金坛市| 和林格尔县| 台北市| 苍南县| 林周县| 图木舒克市| 安陆市| 屯昌县| 莱芜市| 延川县| 高碑店市| 康保县| 任丘市| 沿河| 延寿县| 潮州市|