なかだです。
Thread.startの引数とブロック引数が一致しなくてもエラーにならな
くなってます。1.6ではArgumentErrorになります。
$ ruby16 -e 'Thread.start(1){|a,b|p a,b}.join'
-e:1: wrong # of arguments (1 for 2) (ArgumentError)
from -e:1:in `join'
from -e:1
$ ruby18 -e 'Thread.start(1){|a,b|p a,b}.join'
1
nil
rb_yield_0()の引数を変えたときの変更洩れじゃないかと思うのです
が。
* eval.c (rb_thread_yield, rb_f_catch): 4th argument to rb_yield_0()
is a set of bit flags.
Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.674
diff -u -2 -p -r1.674 eval.c
--- eval.c 29 Jun 2004 01:31:32 -0000 1.674
+++ eval.c 4 Jul 2004 14:26:40 -0000
@@ -11471,5 +11471,5 @@ rb_thread_yield(arg, th)
ruby_block->dyna_vars = ruby_dyna_vars;
- return rb_yield_0(arg, 0, 0, Qtrue, Qtrue);
+ return rb_yield_0(arg, 0, 0, YIELD_LAMBDA_CALL, Qtrue);
}
@@ -12514,5 +12514,5 @@ rb_f_catch(dmy, tag)
PUSH_TAG(tag);
if ((state = EXEC_TAG()) == 0) {
- val = rb_yield_0(tag, 0, 0, Qfalse, Qfalse);
+ val = rb_yield_0(tag, 0, 0, 0, Qfalse);
}
else if (state == TAG_THROW && tag == prot_tag->dst) {
--
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
中田 伸悦