Ruby類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別
在Ruby中類實(shí)例變量、類實(shí)例方法和類變量、類方法的區(qū)別比較微妙,而且用法也有相當(dāng)?shù)膮^(qū)別。本文探討一下他們的定義和基本的使用場(chǎng)景,以拋磚引玉...
一.類實(shí)例變量和類變量
類變量大家都很熟悉了,就是在類定義中用@@開頭的變量。類變量是用于存儲(chǔ)類的全局信息,它只屬于類,不同與類實(shí)例變量(即用@開頭定義的變量)每一個(gè)類的對(duì)象都有一份數(shù)據(jù)。 類變量是可以被繼承的,也就是說如果我們派生一個(gè)子類,那么在子類中是可以訪問父類的類變量的。子類和父類共享一份數(shù)據(jù),對(duì)一個(gè)類的修改會(huì)反映到另一個(gè)類中。如下邊的代碼運(yùn)行結(jié)果顯示:
class A
#類變量在訪問前必須賦值,否則會(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 B<A
end
#初始的數(shù)據(jù)
A.look
B.look
#修改父類中的類變量
A.alpha=111
A.look
B.look
運(yùn)行結(jié)果:
123, 456, 789
123, 456, 789
111, 456, 789
111, 456, 789
那么什么是類的類實(shí)例變量呢?類的類實(shí)例變量是在類的類方法中或方法外邊(不能在實(shí)例方法中,那是類的實(shí)例變量)以@開頭定義的變量,這樣定義的變量值屬于類對(duì)象本身,不能夠被子類繼承。類對(duì)象這個(gè)說法可能有些讓人疑惑,其實(shí)Ruby中的一起都是對(duì)象,我們定義的類和Ruby的內(nèi)置類本身就是元類的對(duì)象。因此如果要定義需要和子類共享的類全局?jǐn)?shù)據(jù),使用類變量;但是如果要定義僅供類本身使用的類全局?jǐn)?shù)據(jù)可以使用類實(shí)例變量。還有一點(diǎn)需要注意的是,和類變量不同的是類實(shí)例變量不要求訪問前必須賦值,不賦值它的值就是nil 。我們還是看一個(gè)例子,能夠更清楚一點(diǎn)...
class A
#類的類實(shí)例變量在訪問前可以賦值也可以不賦值,不賦值就是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 B<A
end
A.look
B.look
代碼的運(yùn)行結(jié)果如下:
123, 456, 789
, ,
nil
相關(guān)文章
Lua中pairs與ipairs的區(qū)別總結(jié)
這篇文章主要給大家介紹了關(guān)于Lua中pairs與ipairs區(qū)別的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Lua編程示例(八):生產(chǎn)者-消費(fèi)者問題
這篇文章主要介紹了Lua編程示例(八):生產(chǎn)者-消費(fèi)者問題,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-07-07
Lua中的string庫(kù)(字符串函數(shù)庫(kù))總結(jié)
這篇文章主要介紹了Lua中的string庫(kù)(字符串函數(shù)庫(kù))總結(jié),本文講解了string庫(kù)的操作方法,著重講解了string.format方法,需要的朋友可以參考下2014-11-11

