2013-08-07 264 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相同的结果。