特異クラスのインスタンス変数について
ruby初心者です。
クラスインスタンス変数について勉強しております。
class << self; endで定義した@valですが、
クラスの先頭で定義した@val = 10とは違うインスタンスのようです。
class << クラス名; end はクラスメソッドを定義するイディオムである
認識なので、@valはクラスインスタンス変数であると思うのですが違うのでしょうか
class Ins
@val = 10
def foo
@val
end
class << self
@val = 15 #=> クラスインスタンス変数を参照しているようにみえる
def bazz
@val
end
end
end
class << Ins
# puts self.bazz NoMethodErrorが発生する
puts @val #=> ここでは15が出力される
end
puts Ins.bazz #=> ここでは10が出力される