報國挺身日記 このページをアンテナに追加 RSSフィード

2006/04/07 天下り先へ国費6兆円

[][][] local rebinding 00:10

まつもとさんのコメント、FooということはSelector namespaceの仕様に近いということですか。私はその点についてはlocal rebindingの仕様のほうが使いやすい気がします。尤も実際に使用したことがないので、空想レベルの感覚ですが。どちらにも長所と短所があることは確かなので、もう少し考察してみます。

その後少し考えてみましたが、やはりlocal rebindingの仕様のほうが良いと思います。

元のプログラムを書き換えないままで動作を変えるために、差分をmoduleとして定義することが目的の筈です。local rebindingになっていないと、あるメソッドの定義を変えようとしても、元のメソッドを元のmoduleから呼び出していれば完全にはhookできなくなります。local rebindingでないほうが嬉しいケースも少しはあるでしょうが、そのときには元のmoduleの中のメソッド名とは異なる名前でメソッドを定義すれば、綺麗な方法ではないですが避けることができます。

AOPやDIを実現する手段として考えた場合でも、local rebindingのほうが容易なのではないでしょうか?

また、デザインパターンを表現する手段としても、MixJuiceのようにlocal rebindingのほうが良い気がします。

MixJuice によるデザインパターン改善カタログ

コメント 21:36

済みません。module systemのことしか考えていなかったので、moduleと無関係な方法は一瞬も考えてませんでした。module systemを使わず、単純に拡張するということですよね。

唯、一点だけ難を言えば、変更したメソッドの中から元のメソッドを呼び出すためには元のメソッドをaliasする必要があるのと、そうしたときに、独立した複数個の拡張を上書きで適用しなければならない場合が面倒かなと思います。

まつもとまつもと 2006/04/07 12:25 まだ元の論文を読む時間が取れてないので勘違いしているかもしれませんが、local rebinding相当はopen classで実現できるんじゃないでしょうか。

トラックバック - http://d.hatena.ne.jp/kkos/20060407