なかだです。

Procからdefine_methodで定義したメソッドにブロックを指定したとき
のメッセージが、適切なものではないように思えます。

$ ruby -w -e 'class Foo; define_method(:foo){}; end' -e 'Foo.new.foo{}'
-e:2: warning: block for Proc#foo is useless

本当は、define_methodのメソッドにもブロックを渡せるといいんです
けどねぇ。


Index: eval.c =================================================================== RCS file: /cvs/ruby/src/ruby/eval.c,v retrieving revision 1.601 diff -u -2 -p -r1.601 eval.c --- eval.c 5 Dec 2003 08:27:19 -0000 1.601 +++ eval.c 11 Dec 2003 15:17:01 -0000 @@ -7125,6 +7125,8 @@ proc_invoke(proc, args, self, klass) if (rb_block_given_p() && ruby_frame->last_func) { + if (klass != ruby_frame->last_class) + klass = rb_obj_class(proc); rb_warning("block for %s#%s is useless", - rb_obj_classname(proc), + rb_class2name(klass), rb_id2name(ruby_frame->last_func)); }
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦