From: "usa (Usaku NAKAMURA)" <usa@...> Date: 2013-08-03T00:04:27+09:00 Subject: [ruby-dev:47568] [ruby-trunk - Feature #3753][Assigned] value of def-expr Issue #3753 has been updated by usa (Usaku NAKAMURA). Status changed from Closed to Assigned % Done changed from 100 to 50 =begin ``define_method()'' と書かれると迷いが生じるんですが、Module#define_method が意図されていたということでいいんでしょうか? で、あれば、こんなもんかと思うんですが、こちらはまだ入れてません。 Index: proc.c =================================================================== --- proc.c (リビジョン 42336) +++ proc.c (作業コピー) @@ -1510,7 +1510,7 @@ rb_mod_define_method(int argc, VALUE *ar rb_raise(rb_eTypeError, "wrong argument type (expected Proc/Method)"); } - return body; + return ID2SYM(id); } /* =end ---------------------------------------- Feature #3753: value of def-expr https://bugs.ruby-lang.org/issues/3753#change-40833 Author: usa (Usaku NAKAMURA) Status: Assigned Priority: Normal Assignee: usa (Usaku NAKAMURA) Category: core Target version: current: 2.1.0 =begin RubyKaigi見てて思い出したのですが、def式はSymbolを返すようにしませんか? そうすると、 class Foo private def foo() # ... end end などと書けるようになります。 以下パッチ。 Index: vm.c =================================================================== --- vm.c (リビジョン 29124) +++ vm.c (作業コピー) @@ -1893,7 +1893,7 @@ m_core_define_method(VALUE self, VALUE c REWIND_CFP({ vm_define_method(GET_THREAD(), cbase, SYM2ID(sym), iseqval, 0, rb_vm_cref()); }); - return Qnil; + return sym; } static VALUE @@ -1902,7 +1902,7 @@ m_core_define_singleton_method(VALUE sel REWIND_CFP({ vm_define_method(GET_THREAD(), cbase, SYM2ID(sym), iseqval, 1, rb_vm_cref()); }); - return Qnil; + return sym; } static VALUE =end -- http://bugs.ruby-lang.org/