標籤:variable 代碼 訪問 抽象 ble style utc puts 執行個體變數
定義很簡單:執行個體變數@開頭,類變數@@開頭看了一些文章和書,目前瞭解到的(其實還是不太懂,先記著吧,錯了再改):
- 類變數:可以在類方法和類執行個體方法中訪問,也能被子類繼承,並且子類修改之後,父類的值也會更改。
- 不同的子類都共用這個一個數值,包括子類的執行個體,都可以來修改這一個值。就理解成:不管自己還是子類的,什麼函數都可以訪問,也都可以改,改了之後也是大家共用。
- 執行個體變數:能被類方法訪問,不能被繼承,子類中賦值不會影響父類。
- 子類如果修改了,其實是不是重新定義了一下又賦了新的值?
- 這個其實更像應該和C++/C#類裡的public變數,子類繼承了之後可以重新賦值,代碼還是一樣用。
- 但是執行個體變數不能被類執行個體方法訪問就有點抽象了…被相似的名詞弄的腦仁兒疼。
我也不太知道自己在說什麼, 忘了就直接看代碼:
1 class Test 2 @@class_var = 10 3 @class_instance_var = 1 4 #類方法: 兩種變數都可以訪問 5 def self.outclass_var 6 puts @@class_var 7 end 8 def self.outclass_instance_var 9 puts @class_instance_var10 end11 #類執行個體方法: 不能訪問類執行個體變數12 def outclass_var13 puts @@class_var14 end15 def outclass_instance_var16 puts @class_instance_var17 end18 end19 20 #如果兩個變數不初始化,這裡就列印不出來。不知道是不是版本的問題21 puts Test.class_variables #=>@@class_var22 puts Test.instance_variables #=>@class_instance_var23 24 #類變數,可以被子類共用且修改25 class SubCls < Test26 @@class_var = 1227 end28 29 #可以看到現在類變數值都被修改了30 Test.outclass_var #=>1231 SubCls.outclass_var #=>1232 33 #子類無法繼承父類的執行個體變數34 Test.outclass_instance_var #=>135 SubCls.outclass_instance_var #=>空36 37 38 #類執行個體方法不能訪問執行個體變數39 Test.new.outclass_var #=>1240 Test.new.outclass_instance_var #空41 42 #再看一下子類,和父類的情況相同43 SubCls.new.outclass_var #=>1244 SubCls.new.outclass_instance_var #空
ruby中的執行個體變數和類變數