1

@x親クラスに遅延ロードすると、問題なく呼び出して初期化できますが、のサブクラスAから呼び出そうとすると、の初期化メソッドが呼び出されず、 が返されます。何故ですか?AB@xnil

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
4

2 に答える 2

2

xインスタンス変数に直接アクセスする代わりに使用します@a

class B < A
  def use_x
    puts x.inspect
  end
end
于 2013-08-07T03:07:23.063 に答える
0

メソッドxが 内で呼び出されないためuse_xです。かどうかAB関係ありません。puts B.new.xの場合と同じ結果になりputs A.new.xます。

于 2013-08-07T03:19:31.930 に答える