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/