[#28446] named capture and /g, /G option — "K.Kosako" <sndgk393@...>

Ruby 1.9に、

30 messages 2006/03/21
[#28449] Re: named capture and /g, /G option — "K.Kosako" <sndgk393@...> 2006/03/21

> Ruby 1.9に、

[#28452] Re: named capture and /g, /G option — Yukihiro Matsumoto <matz@...> 2006/03/21

まつもと ゆきひろです

[#28453] Re: named capture and /g, /G option — "K.Kosako" <sndgk393@...> 2006/03/21

Yukihiro Matsumoto wrote:

[ruby-dev:28488] Re: __method__ (was Re: aliasとcaller)

From: "U.Nakamura" <usa@...>
Date: 2006-03-30 05:34:48 UTC
List: ruby-dev #28488
こんにちは、なかむら(う)です。

In message "[ruby-dev:28483] Re: __method__ (was Re:  aliasとcaller)"
    on Mar.29,2006 14:42:04, <usa@garbagecollect.jp> wrote:
| まだ深く考察してないのですが、Objectクラスのメソッドでいいん
| ですかねえ。

グローバル関数でいい気がしてきたので試しに作ってみました。
これでいいのかな。

  % ruby -e '
  p __method__, __callee__
  def foo
    p __method__, __callee__
  end
  alias bar foo
  foo
  bar
  '
  nil
  nil
  :foo
  :foo
  :foo
  :bar


Index: eval.c
===================================================================
RCS file: /home/cvs/ruby/eval.c,v
retrieving revision 1.890
diff -u -1 -p -r1.890 eval.c
--- eval.c	23 Feb 2006 04:24:39 -0000	1.890
+++ eval.c	30 Mar 2006 05:32:02 -0000
@@ -7675,2 +7675,26 @@ rb_exec_end_proc(void)
 
+static
+rb_f_method_name(void)
+{
+    struct FRAME* prev = ruby_frame->prev;
+    if (prev && prev->this_func) {
+	return ID2SYM(prev->this_func);
+    }
+    else {
+	return Qnil;
+    }
+}
+
+static
+rb_f_callee_name(void)
+{
+    struct FRAME* prev = ruby_frame->prev;
+    if (prev && prev->callee) {
+	return ID2SYM(prev->callee);
+    }
+    else {
+	return Qnil;
+    }
+}
+
 void
@@ -7729,2 +7753,5 @@ Init_eval(void)
 
+    rb_define_global_function("__method__", rb_f_method_name, 0);
+    rb_define_global_function("__callee__", rb_f_callee_name, 0);
+
     rb_define_method(rb_mKernel, "send", rb_f_send, -1);

それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>



In This Thread