From: matz@... (Yukihiro Matsumoto) Date: 1997-12-25T10:57:38+09:00 Subject: [ruby-dev:1168] Re: Object#bind まつもと ゆきひろです In message "[ruby-dev:1166] Re: Object#bind" on 97/12/24, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |>でも,selfのクラスとメソッドが仮定しているselfのクラスが食い |>違っちゃうので,selfに対するメソッド呼出とかがうまくいかない |>可能性は高いですね.とはいえ,これは自分の責任だということに |>なると思いますが. | |superはうまく行くのにselfは駄目なのですか? selfもメソッドが覚えている |クラスとすれば良いんじゃないかしら? そういう実装は難しい? superは「このメソッドが定義されているクラスのスーパークラス」 からメソッドを検索しますが,selfに対するメソッド呼出しは結局 は(visibilityのことを除くと)通常のメソッド呼出しなので「self のクラス」からメソッドを検索します.selfとメソッドオブジェク トが束縛されているクラスが異なると「一時的にselfのクラスが差 し変わる」ような実装にする必要がありますが,これは実装上かな り大変です.それに多分fooとself.fooが全然違うメソッドを起動 する可能性が出ちゃうんで,混乱の元にしかならないような. なんか,こうあちらの問題を潰すとこちらに別の問題が出て来るよ うなのはもうちょっと整理してからでないと実装にかかりたくない 気分があります. |ただ, UnboundMethodの用途は, | |* Methodのクラス間移動(他のモジュールへの束縛) |* レシーバのクラスを限定しないapply | |にあると思うのですが, 確かに.しかし,これらは同時に実現してしまうとrubyの実行モデ ルをかなり変えてしまうものであることも確かですから,十分な検 討が必要なようにも思います. |rubyで書かれたクラスのデータ構造はメソッドの呼び出しによって決まるもの |であり, クラス継承とは関係ない(メソッドの呼び出しがクラス継承を用いてい |るので間接的には関係ありますが)ですよね. 全部のオブジェクトに対してこれが真ならもうちょっと楽なんです けど,実際は「オブジェクトのかなりの割合はそうである」に留まっ ていますよね. |ですので, どうせそこまでするのなら, メソッドのsuperの呼びだし関係(メソッ |ド結合と呼びましょう)はデフォルトでは, そのメソッドの所属するクラス継 |承と同じになるが, メソッド結合をメソッド単位に独自に定義できてしまうよ |うなモデルにしちゃうのも面白いかも知れませんね. それは…CLOSのメタオブジェクトプロトコルなみの実装を考えれば 不可能ではないでしょうけど,なんかRubyの(それに*私*の)手に余 るような…. まつもと ゆきひろ /:|)