在Ruby中,類實例方法、類變量和類方法之間的區別是很細微的,并且用法也有很大的不同,本文是武林技術頻道小編和大家分享的Ruby中類變量和實例變量的區別。
1、類變量名以@@開始,一個類變量被這個類所有的實例對象共享;實例變量名以@開始,每個實例對象有各自不同的實例變量;
2、類變量在使用前必須初始化,否則在使用時會報錯;而實例變量如果沒有初始化,則使用時返回nil;
3、類變量是私有的,在類外無法直接訪問,可以通過類方法和實例方法訪問;
?
復制代碼 代碼如下:
class B
??? @@number = 11
??? @@num = 22
?
??? def my_method????? #定義實例方法
??????? puts @@number
??? end
?
??? def self.my_method? #定義類方法
??????? puts @@num
??? end
end
?
b = B.new()
puts b.my_method() #通過實例方法訪問類變量? => 11
puts B.my_method() #通過類方法訪問類變量??? => 22
?
4、實例變量也是私有,無法在類外直接引用,可以通過類方法和實例方法訪問;
?
復制代碼 代碼如下:
class B
????? @num? = 11??? #實際上這是“類的實例變量”
????? @test = 22
????? def my_method????? #定義實例方法
????????? puts @num = 33 #跟前面定義的@num不在一個作用域?? =>33
????????? puts @test???? #跟前面定義的@test不在一個作用域里,未賦初值,因此返回nil?
????????? puts @new = 567? #在實例運行my_method時才定義的實例變量 =>567
????? end
????? def self.my_method????? #定義類方法
???????? puts @num??????? #這里的@num就是前面定義過的@num? =>11
???????? puts @test?????? # =>22
???? end
?end
?
?b = B.new()
?
?b.my_method
?puts "--------------------"
?B.my_method
看了上面的介紹,相信大家對于Ruby中類變量和實例變量的區別,已經有了自己的認識。所以我們在學習內容的時候要認真,這樣能提高我們在工作中的效率,希望大家能繼續支持武林技術頻道!