[#1320] [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

32 messages 1998/01/23
[#1321] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/23

まつもと ゆきひろです

[#1323] Re: [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA) 1998/01/23

けいじゅ@日本ラショナルソフトウェアです.

[#1332] Re: [MethodIndex] Bug and question — keiju@... (Keiju ISHITSUKA) 1998/01/27

けいじゅ@日本ラショナルソフトウェアです.

[#1333] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/27

まつもと ゆきひろです

[#1334] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/27

けいじゅ@日本ラショナルソフトウェアです.

[#1351] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/29

けいじゅ@日本ラショナルソフトウェアです.

[#1353] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/29

まつもと ゆきひろです

[#1354] Re: [MethodIndex] Bug and question — keiju@... (石塚圭樹 ) 1998/01/29

けいじゅ@日本ラショナルソフトウェアです.

[#1355] Re: [MethodIndex] Bug and question — matz@... (Yukihiro Matsumoto) 1998/01/30

まつもと ゆきひろです

[ruby-dev:1355] Re: [MethodIndex] Bug and question

From: matz@... (Yukihiro Matsumoto)
Date: 1998-01-30 04:46:27 UTC
List: ruby-dev #1355
まつもと ゆきひろです

In message "[ruby-dev:1354] Re: [MethodIndex] Bug and question"
    on 98/01/30, 石塚圭樹 <keiju@rational.com> writes:

|けいじゅ@日本ラショナルソフトウェアです.

|``class << Bar; ancestors; end ''の結果が
|不満なんです. やはり:
|
|  Barの特異クラス < Fooの特異クラス < Bazの特異クラス <Objectの特異クラス <
|  Class < Module < Object < Kernel
|
|となって欲しいんですが...
|
|# MethodIndexはこうなっていることを前提として実装してしまいました(;_;

むむう.まず特異クラスの意味について考えましょう.いわばモデ
ルですね.

  まず,現在のRubyの実装では各オブジェクト毎に名前のないクラ
  スが付随していますが,これは言語仕様に含まれていません.で
  すから,ancestersに特異クラスが含まれることはありえません.

  次に,「class <<obj; .. end」という構文ですが,これの仕様
  としての意味は「一時的なクラスオブジェクトを用意し,そのク
  ラスに対する操作(メソッドや定数の定義)を,指定したオブジェ
  クトに対して有効にする」というものです.現在の実装ではオブ
  ジェクトに付随する無名クラスをそのまま見せていますが,これ
  はいわば「実装依存」であり,将来に渡って保証できるものでは
  ありません.

  ですから,objがこの「一時的なクラス」のインスタンスである
  か,という答えには「そうである必要性はない」と考えています.
  特異メソッドが定義されようとされまいと,モデル上objはやは
  りもともとのクラスのインスタンスであることには変わりないと
  考えているので.

        obj.instance_of?(class)

  の定義は

        obj.type == class

  であり,それ以上のものではありません.

で,

|>|4.3 つぎに, incetance_of?に関する質問ですが.

|# 前の続き
|rbc0> BAR = eval("class << Bar; self; end")
|Class
|rbc0> Bar.instance_of?(BAR)
|false
|rbc0> Bar.instance_of?(Class)
|false
|rbc0> Bar.instance_of?(Bar.type)
|false
|
|こういう結果はおかしくないか? という意味です.

最初のものは上述の理由によりおかしくないと考えています.で,
残りの二つ,

|rbc0> Bar.instance_of?(Class)
|false
|rbc0> Bar.instance_of?(Bar.type)
|false

これらはおかしいと思いますが,1.1b5でも前者はtrueが返ります
し,今回のパッチで後者もtrueを返すようになったと思います.

しかし,メソッドインデックスを実装する上で上記のモデルや現在
の実装に不都合があるということでしたら,メタレベルの機能の提
案者は石塚さんですから,相談に乗ります.

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

In This Thread