2013-08-07 305 views
1

如果我讓@x延遲加載在A父類可以稱爲和初始化就好了,但如果我嘗試從A的子類B調用它,那麼就不會調用@x的初始化方法並返回nil。這是爲什麼?延遲加載

class A 
    def x 
    @x ||= 'x' 
    end 
end 

puts A.new.x # 'x' 

class B < A 
    def use_x 
    puts @x.inspect # nil 
    end 
end 

回答

2

使用x而不是直接訪問實例變量@a

class B < A 
    def use_x 
    puts x.inspect 
    end 
end 
0

因爲該方法x沒有內use_x調用。無論是A還是B都無關緊要。 puts B.new.x會得到與puts A.new.x相同的結果。