在Ruby中,類實(shí)例方法、類變量和類方法之間的區(qū)別是很細(xì)微的,并且用法也有很大的不同,本文是武林技術(shù)頻道小編和大家分享的Ruby中類變量和實(shí)例變量的區(qū)別。
1、類變量名以@@開始,一個(gè)類變量被這個(gè)類所有的實(shí)例對(duì)象共享;實(shí)例變量名以@開始,每個(gè)實(shí)例對(duì)象有各自不同的實(shí)例變量;
2、類變量在使用前必須初始化,否則在使用時(shí)會(huì)報(bào)錯(cuò);而實(shí)例變量如果沒有初始化,則使用時(shí)返回nil;
3、類變量是私有的,在類外無(wú)法直接訪問(wèn),可以通過(guò)類方法和實(shí)例方法訪問(wèn);
?
復(fù)制代碼 代碼如下:
class B
??? @@number = 11
??? @@num = 22
?
??? def my_method????? #定義實(shí)例方法
??????? puts @@number
??? end
?
??? def self.my_method? #定義類方法
??????? puts @@num
??? end
end
?
b = B.new()
puts b.my_method() #通過(guò)實(shí)例方法訪問(wèn)類變量? => 11
puts B.my_method() #通過(guò)類方法訪問(wèn)類變量??? => 22
?
4、實(shí)例變量也是私有,無(wú)法在類外直接引用,可以通過(guò)類方法和實(shí)例方法訪問(wèn);
?
復(fù)制代碼 代碼如下:
class B
????? @num? = 11??? #實(shí)際上這是“類的實(shí)例變量”
????? @test = 22
????? def my_method????? #定義實(shí)例方法
????????? puts @num = 33 #跟前面定義的@num不在一個(gè)作用域?? =>33
????????? puts @test???? #跟前面定義的@test不在一個(gè)作用域里,未賦初值,因此返回nil?
????????? puts @new = 567? #在實(shí)例運(yùn)行my_method時(shí)才定義的實(shí)例變量 =>567
????? end
????? def self.my_method????? #定義類方法
???????? puts @num??????? #這里的@num就是前面定義過(guò)的@num? =>11
???????? puts @test?????? # =>22
???? end
?end
?
?b = B.new()
?
?b.my_method
?puts "--------------------"
?B.my_method
看了上面的介紹,相信大家對(duì)于Ruby中類變量和實(shí)例變量的區(qū)別,已經(jīng)有了自己的認(rèn)識(shí)。所以我們?cè)趯W(xué)習(xí)內(nèi)容的時(shí)候要認(rèn)真,這樣能提高我們?cè)诠ぷ髦械男剩M蠹夷芾^續(xù)支持武林技術(shù)頻道!