From: Yukihiro Matsumoto Date: 2009-10-30T23:10:15+09:00 Subject: [ruby-dev:39594] Re: [ruby-cvs:32774] Ruby:r25556 (trunk): * array.c (rb_ary_to_ary): do not use #respond_to? to detect まつもと ゆきひろです In message "Re: [ruby-dev:39591] Re: [ruby-cvs:32774] Ruby:r25556 (trunk): * array.c (rb_ary_to_ary): do not use #respond_to? to detect" on Fri, 30 Oct 2009 20:51:46 +0900, Nobuyoshi Nakada writes: |At Fri, 30 Oct 2009 18:40:53 +0900, |Yukihiro Matsumoto wrote in [ruby-dev:39589]: |> * method_missingが再定義されている時にはそれを呼ぶ。ちゃん |> と動作するかどうかはよくわからない | |こっちを実装してみました。 コードレビュー。 * emtry -> entry * check_funcallの中でrb_search_method_emtry()を呼んでも問 題なさそう * method_missingを呼ぶ条件は |+ if (!me || (me->flag & NOEX_BASIC) || !rb_obj_respond_to(recv, mid, TRUE)) になっているが、rb_method_basic_definition_p()だけでよい のではないか。 * 私の理解が正しければ、正しい(と思われる)ロジックは + meがあればそれを呼ぶ + method_missingが再定義されていなければQundef + 再定義されていれば、rescueした上でmethod_missingを呼ぶ + 例外が起きたら、以下の条件を満たすときだけ、Qundef。 満たさなければ、同じ例外をそのままあげる - レシーバが同じ - メソッド名が同じ どうでしょう?