Hatena::Grouprubyist

Going My Ruby Way このページをアンテナに追加 RSSフィード

Ruby ロゴ (C) Ruby Association LLC

2010年11月22日(月)

オブジェクトモデル

| 16:09 |  オブジェクトモデル  - Going My Ruby Way を含むブックマーク はてなブックマーク -  オブジェクトモデル  - Going My Ruby Way  オブジェクトモデル  - Going My Ruby Way のブックマークコメント

オープンクラス

オープンクラスの問題点として、

  • 意図せずに既存のメソッドをオーバーライドしやすいこと

がある。

# メソッドの調べ方
obj = Object.new
p obj.methods                       # public と protencted
p obj.public_methods
p obj.protected_methods
p obj.private_methods

p Object.instacen_methods           # public と protencted
p Object.public_instance_methods
p Object.protected_instance_methods
p Object.private_instance_methods

その他のイントロスペクション。

# インスタンス変数を調べる
obj.instance_variables  # => インスタンス変数を返す ([:@a] な感じ)

#定数のパスを調べる
module M
  class C
     module MM
       Module.nesting   # => [M::C::MM, M::C, M]
     end
   end
end

M.constances            # => ["C"]  1.9 では [:C]

インクルードクラス(プロキシクラス)

モジュールをインクルードする時に継承チェーンに挿入するためにラップする無名クラス

module M ; end
class C ; include M ; end

C.ancestors   # => [C, M, Object, PP::ObjectMixin, Kernel]

クラスの継承チェーンは「右へ一歩進む、それから上へルール」でたどる。

参考書籍

メタプログラミングRuby

メタプログラミングRuby