なかだです。

At Thu, 3 Feb 2000 06:02:33 +0900,
クリス <kurisu / swlab.csce.kyushu-u.ac.jp> wrote:
> ただ、これだと面倒かつ読みにくいので、今は以下の様に
> することにしています。
> 
>   # Thread に引数を渡せないのは辛いから、
>   # 引数の渡せる start を自前で作る。
>   class Thread
>     def Thread::start_with_args(*args, &block)
>       return Thread.start {
> 	block.call(*args)
>       }
>     end
>   end

  確実な方法はこれしかないと思います。というか、Thread.start には
新しい Thread 自身が渡されますが、これって Thread.current で得ら
れるので、むしろ Thread.start への引数を渡す形式の方が使いやすい
ような気がするのですが。


Index: eval.c =================================================================== RCS file: /home/cvs/ruby/eval.c,v retrieving revision 1.26 diff -u -2 -p -r1.26 eval.c --- eval.c 2000/02/01 03:12:00 1.26 +++ eval.c 2000/02/02 22:33:45 @@ -7267,19 +7267,19 @@ rb_thread_scope_shared_p() static VALUE rb_thread_yield(arg, th) - int arg; + VALUE arg; thread_t th; { scope_dup(ruby_block->scope); - return rb_yield_0(th->thread, 0, 0, Qfalse); + return rb_yield_0(arg, 0, 0, Qfalse); } static VALUE -rb_thread_start(klass) - VALUE klass; +rb_thread_start(klass, args) + VALUE klass, args; { if (!rb_iterator_p()) { rb_raise(rb_eThreadError, "must be called as iterator"); } - return rb_thread_create_0(rb_thread_yield, 0, klass); + return rb_thread_create_0(rb_thread_yield, args, klass); } @@ -7709,7 +7709,7 @@ Init_Thread() rb_cThread = rb_define_class("Thread", rb_cObject); - rb_define_singleton_method(rb_cThread, "new", rb_thread_start, 0); - rb_define_singleton_method(rb_cThread, "start", rb_thread_start, 0); - rb_define_singleton_method(rb_cThread, "fork", rb_thread_start, 0); + rb_define_singleton_method(rb_cThread, "new", rb_thread_start, -2); + rb_define_singleton_method(rb_cThread, "start", rb_thread_start, -2); + rb_define_singleton_method(rb_cThread, "fork", rb_thread_start, -2); rb_define_singleton_method(rb_cThread, "stop", rb_thread_stop, 0);
-- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦