メタプログラミングRuby 第2章 火曜日:メソッド その3

今日は method_missing を使った動的プロキシの実例とクイズのところです。

  • 動的プロキシ - こういう名前がついてるのは始めて知りましたが内容はいつもの感じです
  • respond_to? の再定義
    • こはちょっと古いです。少なくとも 1.9.2 では Object#respond_to_missing? を再定義して、ここで method_missing が処理するメソッド名に true を返させると、 respond_to? がこれを考慮してくれるようになっています。もちろん respond_to? を再定義してもいいですが、こちらを使えば継承元のメソッドについても面倒を見てくれるのでよいでしょう。
  • クイズ - method_missing によるいやなバグ
    • ローカル変数のスコープ間違いで意図せずメソッド呼び出しになってしまって無限再帰
    • Object に既に定義されているメソッドのせいで method_missing の呼び出しにこない
      • メソッドを全て undef_method した BlankSlate
      • 1.9 なら BasicObject から継承する
      • 今気がついたんですが、BasicObject のインスタンスメソッドには __id__ が含まれてませんね。組み込みで利用するためなら BasicObject に入れておいたほうがよさそうですが……

今日で第2章は終わりです。第3章の題材はブロックだそうです。