From: matz@... (Yukihiro Matsumoto) Date: 2003-08-23T10:47:04+09:00 Subject: [ruby-dev:21231] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values. まつもと ゆきひろです In message "[ruby-dev:21229] Re: [ruby-cvs] ruby: * enum.c (inject_i): use rb_yield_values." on 03/08/23, nobu.nakada@nifty.ne.jp writes: |"ab".scan(/(.)(.)/){|x|} で警告が出るようにする、ということでしょ |うか。 そうですね。 |ただ、この変更は少々疑問なんですが。 | |$ ruby -v -e '"ab".scan(/(.)/){|x,|p x}' |ruby 1.8.0 (2003-08-21) [i686-linux] |"a" |"b" |$ ./ruby -v -e '"ab".scan(/(.)/){|x,|p x}' |ruby 1.8.0 (2003-08-22) [i686-linux] |["a"] |["b"] ううむ、これでどうでしょう。 --- eval.c 22 Aug 2003 17:43:57 -0000 1.519 +++ eval.c 23 Aug 2003 01:45:49 -0000 @@ -4256,7 +4256,16 @@ rb_yield_splat(values) { - values = svalue_to_avalue(values); - if (RARRAY(values)->len == 0) { - return rb_yield_0(Qundef, 0, 0, Qfalse, Qfalse); + VALUE tmp; + int avalue = Qfalse; + + tmp = rb_check_array_type(values); + if (!NIL_P(tmp)) { + if (RARRAY(tmp)->len == 0) { + values = Qundef; + } + else { + values = tmp; + avalue = Qtrue; + } } - return rb_yield_0(values, 0, 0, Qfalse, Qtrue); + return rb_yield_0(values, 0, 0, Qfalse, avalue); }