→ AIGecko:話說那些打算使用Singleton模組的類別都沒有繼承 09/26 16:05
→ AIGecko:不過類別變數的繼承BUG好像修好了 父類子類不會影響 09/26 16:06
看到這個我又去實驗一下
=== code ===
class C1
@@a = 1
def self.a
@@a
end
end
puts C1.a #=> 1
class C2 < C1
@@a = 2
def self.a
@@a
end
end
puts C2.a #=> 2
puts C1.a #=> 2
=== code ===
所以還是類別變數在同一個繼承體系中還是同一個喔!
我是用Windows 7,ruby 1.9.3p0
結論就是:盡量不要用類別變數,會出現出乎意料的bug (用神奇的||=會更容易)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.226.131.107
→ mars90226:欸對了忘了說,這個應該不是bug,本來就是這樣設計的 09/26 19:03
推 AIGecko:突然覺得奇怪 我到底從哪裡看到修好的訊息... 09/26 20:56
→ AIGecko:話說那個 ||= 應該是nil時初始化吧 好像還有 &&= 09/26 20:59
→ mars90226:是阿,所以當你以為是初始化,其實卻改到父類別的變數~ 09/26 22:13
推 AIGecko:不過這些類別我也沒繼承 因為Singleton不太有繼承需要... 09/26 22:47
→ AIGecko:但是副作用還是要小心... 09/26 22:47
推 tomap41017:不是盡量不要用,是@@與@的差別吧,所以上一篇才說 10/06 18:09
→ tomap41017:改成@就更好囉~ 10/06 18:09