From: nobu.nakada@... Date: 2003-03-25T19:37:54+09:00 Subject: [ruby-dev:19905] Re: Proc#call parameter assignment なかだです。 At Tue, 25 Mar 2003 17:27:12 +0900, Yukihiro Matsumoto wrote: > |役に立ちます。問題はだいたい把握できたので、ちょっと考察して > |みます。 > > というわけで、考察結果をコミットしてみました。 > > > Tue Mar 25 12:24:15 2003 Yukihiro Matsumoto > > * eval.c (rb_yield_0): call avalue_to_mrhs() to assign block > parameter |a|. [ruby-dev:19897] > > よかったら試してください。 (Cで実装された)メソッドを直接あるいはMethod化して呼ぶのと、さら にProcにして呼ぶのとで動作が違います。 $ ruby -v -e '/\w+/=~"abc";method(:p).to_proc.call([$~])' ruby 1.8.0 (2003-03-25) [i686-linux] "abc" $ ruby -v -e '/\w+/=~"abc";method(:p).call([$~])' ruby 1.8.0 (2003-03-25) [i686-linux] [#] # なんとなくavalue <-> svalueのルールが複雑すぎるような気もした # り。 Index: eval.c =================================================================== RCS file: //sharui/cvs/ruby/src/ruby/eval.c,v retrieving revision 1.416 diff -u -2 -p -r1.416 eval.c --- eval.c 25 Mar 2003 08:26:08 -0000 1.416 +++ eval.c 25 Mar 2003 10:08:02 -0000 @@ -7299,8 +7304,5 @@ bmcall(args, method) VALUE args, method; { - volatile VALUE a; - - a = svalue_to_avalue(args); - return method_call(RARRAY(a)->len, RARRAY(a)->ptr, method); + return method_call(1, &args, method); } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦