まつもと ゆきひろです

In message "[ruby-list:2139] Re: [BUG] for line in $<"
    on 97/02/15, 石塚圭樹 <keiju / shljapan.co.jp> writes:
|けいじゅ@SHLジャパンです. 

|[1] $<.type
|
|上のパッチで変わったのは, 第4パラメータだけですがこれってどういう意味
|なんでしょう?

メソッドの引数の数です.間違って登録していました.-1は
argc/argv形式で不定この引数をとるという意味です.詳細は
README.EXTを参照してください.

|print $<.type 
|----
|Object
|
|となりますが, これはどういう意味でしょうか?
|
|$<は, 特異メソッドが定義されたオブジェクトなのでしょうか?

そうです.このようなものにはほかにmain(トップレベルのself)や
ENVがあります.

|[2] cloneの定義
|また,
|
|f = $<.clone
|
|とすると, $< と同じメソッドが使えるようになりますが, cloneは特異メソッ
|ド(特異クラス)を継承していると考えて良いのでしょうか? 

特異クラスを継承しているというのはむずかしい表現ですね.
cloneは特異メソッドも含めて継承していると表現してください.
rubyの実行モデルには「特異クラス」というものはありません.こ
れは実装上の都合です.

|[3] 特異クラスの継承
|あるオブジェクトの特異クラスを継承するメソッドはcloneしかないのでしょ
|うか?

特異メソッドを含めてオブジェクトをコピーする手段はcloneしか
ありません.ちなみにdupは「同じ内容のオブジェクトを作る」こ
としか保証していません.実際はデフォルトの動作ではcloneして
いますけど.

|[4] cloneの再定義
|また, cloneも当然再定義できますが, cloneを再定義した場合も特異クラスの
|継承関係を維持すべきなのでしょうか?

「特異メソッドを含めて複製する」ですね.その方が良いと思います.

|cloneを適当に再定義すると, この継承関係は維持できるとは限りませんよね.
|cloneの再定義したい場合, 例えばデフォルトの動作はシャロウコピーですが, 
|ディープコピーにしたいと思ったら, 以下のようにまずcloneをおこなって定
|義した方が良いのでしょうか?

そうなるとおもいます.

|[5] オブジェクトの比較
|特異クラス(すべての特異メソッド)が一致するかどうかの判断はできるのでしょ
|うか? 

できないでしょうね.特異クラスそのものがrubyからはみえない概
念ですから,それを使って比較することはrubyの範囲内ではできま
せん.もちろん,Cでメソッドを追加すれば可能ですけど,その場
合でも,cloneは特異クラスを共有するのではなく,特異クラスの
コピーを作っていますから,単純な比較ではすまないでしょうね.

# 特異メソッドに関してはSelf(言語)のモデルを想像してください.
# 実装にとらわれて特異クラスのことを考えると混乱します.

                                まつもと ゆきひろ /:|)