From: matz@... (Yukihiro Matsumoto) Date: 1997-11-20T17:21:03+09:00 Subject: [ruby-dev:906] Re: ruby env[ Re: [Req] Proc.new ] まつもと ゆきひろです In message "[ruby-dev:903] ruby env[ Re: [Req] Proc.new ]" on 97/11/20, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |(setq old-foo (symbol-function 'foo)) | |(defun foo () | ;new-def | (funcall old-foo)) | |なんてしますよね. ああ, でもaliasを使えばいいのかな... でも, aliasは |globalだから変数に代入できるelispよりは使いづらいですね. symbol-functionのように関数と変数の名前空間は分離するが,関 数オブジェクトを取り出す方法がある,というのはそれなりに意味 があるのかも知れません. proc{foo} は途中に束縛が入るので再定義には使えませんものね.とはいえ, これからメソッドオブジェクトを導入するのは(実装方法は大体想 像できるのですが),けっこう手間なことですね. |まあ, サブクラスを使ったりしてうまく回避する方法フレームワークがあるか |もしれませんが... でも,やっぱりRubyでの経験が増せば,そのような部分はサブクラ ス化で対応するのがあるべき姿かなあと思う気持ちもあります. たとえばmh-eクラスを作って,自分用にカスタマイズしたい場合に はmy-mh-eクラスを作ってそっちを起動するとかね. |定数のundefは, 定数に束縛されているオブジェクトとの束縛を解除して, 定 |数そのものをなかったことにするってことですね. そうすると, あるクラス |Fooが定義されていて, undef Fooを行なうとFooは名前なしクラス(か他の名前 |のクラス)になるわけですね. そうするとFooのインスタンスはどうなるかって |問題が発生しますね... ええ,そうですね.ところで,今ふと思ったんですが現状でも * rubyで記述されたプログラムは再ロード可能 * スーパークラスが同一であれば現状の定義を書き直す * 同じクラスで同名のメソッドを定義すると前の定義を捨てて上 書きする ので,定数の再定義の問題さえ回避できればrubyスクリプトの再ロー ドは出来そうに思います.問題はどういう条件で定数の再定義を許 すかですね. |まあ, そうなんですが環境系APはrubyの得意とするところであっても良いと思 |うんですが... まだないですが(^^;;; 多分,どっちかっていうと苦手な分野だと思いますよ.^^;;; 得意にするためにはいくつかのハードルを越えねば. まつもと ゆきひろ /:|)