内部クラスと外部クラス

Javaの本を読んで出てきたので,ちょっとRubyでも勉強してみる.

class Hoge
  def initialize
    @x = "hoge"
    @fu = Fuga.new(@x)
    @pi = Piyo.new(@x)
  end
  
  def hoge
    @fu.hogera
    @pi.hogera
    puts "hoge" + @x
  end
  
  class Fuga
    def initialize(x)
      @x = x
    end
    
    def hogera
      puts @x = "fuga" + @x
    end
  end
  
  class Piyo
    def initialize(x)
      @x = x
    end
    
    def hogera
      puts @x = "piyo" + @x
    end
  end
end

どういう話かというと,内部クラスから外部クラスのインスタンス変数を見に行けるっていう話.始めはFugaにもPiyoにもinitializeは書いていなかったけれど,「@xなんてネーよ」って怒られた.いや,その頃から嫌な予感はしていたんだけれど.


で,実行結果.理想は,

fugahoge
piyofugahoge
hogepiyofugahoge

現実は,

fugahoge
piyohoge
hogehoge

できないのね.参照じゃなくて複製を渡すんだなぁ.なんていうか,ピッケル本でも読んでちゃんとRubyの勉強をしてたらこんな事で迷わないのに,って思った.読みたいのは山々だけれど,今はJavaの勉強をしなければならないのです.