From: matz@... (Yukihiro Matsumoto) Date: 1998-01-29T17:13:11+09:00 Subject: [ruby-dev:1353] Re: [MethodIndex] Bug and question まつもと ゆきひろです In message "[ruby-dev:1351] Re: [MethodIndex] Bug and question" on 98/01/29, 石塚圭樹 writes: |けいじゅ@日本ラショナルソフトウェアです. |4.2 クラス(モジュール)メソッドについて |そこで, ancestorsに関する質問ですが... |#1, #2が違うのは良いんですが, なぜ #2, #3は異なっているのでしょう? | |それに, 最初の3,4個のClassは実際には何なんでしょうね? 気分的には: | | Barの特異クラス < Fooの特異クラス < Objectの特異クラス < | Class < Module < Object < Kernel | |となるべきかなと思うんですが? パッチの追加があります. |# そうすると, Bar.type.ancestorsは1つクラスが少ない? でも, 良く考えた |# らBar.typeが変なのかな? Classそのものを返すべきじゃないかと思うんで |# すが? 今は特異クラス返していますよね? obj_typeにバグがありましたが,typeは特異でないクラスを返す仕 様になってます. |4.3 つぎに, incetance_of?に関する質問ですが. | |rbc0> Bar.instance_of?(Bar.type.ancestors[0]) |false |というけっががでます. なんとなく直観と合わないんですが? instance_of?は「そのクラスのインスタンスか?」という述語であ り,「そのクラスまたはそのサブクラスのインスタンスか?」とい う述語ではありません.そういう目的にはkind_of?を使って下さい. あとは,先のパッチとこのパッチでまともになると思います. diff -u -1 -r1.1.1.2.2.2 class.c --- class.c 1998/01/22 08:32:47 1.1.1.2.2.2 +++ class.c 1998/01/29 08:02:33 @@ -269,2 +269,4 @@ for (p = mod; p; p = RCLASS(p)->super) { + if (FL_TEST(p, FL_SINGLETON)) + continue; if (BUILTIN_TYPE(p) == T_ICLASS) {