読者です 読者をやめる 読者になる 読者になる

the ruby way中

ruby

「第5章 RubyにおけるOOPと動的型操作」読み中。これまでのところ、技巧的にはRubyレシピブックとかなり重複している気がしていて、「便利なクラスを覚えたなぁ」ということは無いのだけど、Rubyの根底に流れるポリシーが染み込んでくるようで嬉しい。特に5章から面白くなってきた。

ところで、クラス変数の扱いを説明する箇所で以下のようなサンプルコードが出てくる(何となく書き換えているけど)。

mitsu@garlic$ cat hoge2.rb
class Isono
  def Isono.item
    puts "called item()"
    class_eval "@@item"
  end

  def Isono.item=(x)
    puts "called item=(#{x})"
    class_eval "@@item = x"
  end
end

class Katsuo < Isono
  @@item = 'bouzu'
end

class Tarao < Isono
  @@item = 'Haaai'
end

p Katsuo.item
p Tarao.item


mitsu@garlic$ ruby hoge2.rb
called item()
"bouzu"
called item()
"Haaai"

本に記載されているサンプルコードでは、「def Isono.item=(x)」が使われないのではないかしら?
「def Isono.item=(x)」をはずしても同様に動作するし。Katsuo.itme = 'nakajima'とかしない限り、このメソッドが呼ばれない気が…