From: nobu.nakada@... Date: 2001-12-08T08:12:36+09:00 Subject: [ruby-dev:15399] Re: UnboundMethod.bind to derived class instance なかだです。 At Sat, 8 Dec 2001 02:32:23 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > |UnboundMethod.bindが派生クラスのインスタンスに対してエラーにな > |りますが、これってなにかまずいことがあるんでしょうか。通しても > |いいような気がするのですが。 > > たとえばObjectのインスタンスとそのサブクラスのStringのインス > タンスでは構造が違います。だからおんなじクラスでないとダメな > んですよ。 うーん、でもそれはMarshallのように、instance_of?ではなくて TYPE()が等しいかどうかで見たほうがいいような気がするのですが。 なんかインスタンスのTYPE()を返すクラスメソッドがあるといいなぁ。 Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.233 diff -u -2 -p -r1.233 eval.c --- eval.c 2001/11/29 15:57:25 1.233 +++ eval.c 2001/12/07 22:12:29 @@ -6815,7 +6815,7 @@ umethod_bind(method, recv) rb_raise(rb_eTypeError, "method `%s' overridden", rb_id2name(data->oid)); } - if (!((TYPE(data->oklass) == T_MODULE) ? - rb_obj_is_kind_of(recv, data->oklass) : - rb_obj_is_instance_of(recv, data->oklass))) { + if (!(rb_obj_is_kind_of(recv, data->oklass) && + ((TYPE(data->oklass) == T_MODULE) || + (TYPE(recv) == TYPE(rb_obj_alloc(data->oklass)))))) { rb_raise(rb_eTypeError, "bind argument must be an instance of %s", rb_class2name(data->oklass)); -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦