From: matz@... (Yukihiro Matsumoto) Date: 1999-08-30T13:19:51+09:00 Subject: [ruby-list:16362] Re: ruby hacking guide まつもと ゆきひろです In message "[ruby-list:16339] Re: ruby hacking guide" on 99/08/27, Minero Aoki writes: |ちょっと遅れましたが、Ruby Hacking Guide アップロードしました。 |まだ、すごく中途半端です。(いきなり本文が切れてたりする…) 細かいようですが、間違いを指摘しておきます。 気分を害さないで聞いといてくださいね。 -- object.html aliasとundef メソッドは、前節のようなつくりで登録され、動的に変更が可能で すから、 aliasやundefはかなり簡単に実装できそうです。aliasは、 メソッドテーブルに 元の名前と同じ実体を新しいキーで登録すれ ばよく、undefは、キーを削除すれば いいだけです。 -- 実際のaliasやundefはやや面倒です。意外ですか? aliasは別名で呼んだメソッドの中でsuperが呼ばれたとき、あたか も元の名前で呼ばれたかのようにスーパークラスの元の名前のメソッ ドを呼び出す必要がある、という条件のために少々複雑なことをし ています。 また、undefはメソッドを削除するのではなく、そのクラスにおい てメソッドをキャンセルするものであるため、キーを削除すること では実現できません。キーを削除するのは Module#remove_method です。 -- object.html Stringの実体。Stringはよくコピーが作成されるので、文字列本体 自体は最初からコピー せずに、変更が起こった時に始めてコピー するようになっています。 -- Rubyがcopy-on-writeしているのは確かなのですが、無条件に行っ ているわけではありません。copy-on-writeの対象になるのは、プ ログラム中に埋め込まれている文字列定数(リテラル)のみです。 -- object.html Regexpの実体。struct re_pattern_buffer *ptr が正規表現のパター ンで、 char *str がマッチ対象の文字列です。文字列を確保する のは、かっこや$1による、 マッチ後の参照に対応するためです。 -- マッチ後の参照のための文字列は RMatch 構造体に格納されます。 strの内容は正規表現のソースを保存し、デバッグや再生成に使う ためです。 -- class.html ちなみに、Class.type が Class になるのはなぜかというと、type がメタクラスを スキップするようになっているからです。ではス クリプトからメタクラスを見ることは できないのか??できませ ん。邪悪な方法(拡張モジュールをつくる)を除けばですが。 -- 現在の実装で特異クラスを見る方法がひとつだけあります。 class <