[#47200] 今 def 文を実行すると、メソッドが定義されるクラス、にアクセスする方法 — "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
きしもとです
5 messages
2010/07/01
[#47211] [ANN] Ruby-1.9.1-p429 Windows用パッケージ リリース — arton <artonx@...>
artonです。
1 message
2010/07/05
[#47213] ruby-debug-ide-0.4.9.gemファイルのローカルインストール — eiichi_maekawa@...
8 messages
2010/07/06
[#47214] Re: ruby-debug-ide-0.4.9.gemファイルのローカルインストール
— keiichi matsunaga <ma2@...>
2010/07/06
On 7/6/2010 1:36 PM, eiichi_maekawa@mhi.co.jp wrote:
[#47215] Re: ruby-debug-ide-0.4.9.gemファイルのローカルインストール
— eiichi_maekawa@...
2010/07/06
松永さん
[#47221] Re: ruby-debug-ide-0.4.9.gemファイルのローカルインストール — Shozo Arai <shozoa@...>
=1B$B9S0f$G$9!#=1B(B
6 messages
2010/07/08
[#47222] Re: ruby-debug-ide-0.4.9.gemファイルのローカルインストール
— eiichi_maekawa@...
2010/07/09
荒井さん
[#47228] ANN++: Ruby-1.9.2-rc1 mswin32-100 のパッケージをリリース — arton <artonx@...>
artonです。
11 messages
2010/07/11
[#47245] Re: for文について
— kamuycikap <kamuycikap@...>
2010/07/21
こんばんは。
[#47246] Re: for文について
— Kiyotaka ATSUMI <kiyotaka@...>
2010/07/21
こんばんは.渥美です.
[#47229] [ANN] Ruby 1.9.2 RC2 is out — "Yuki Sonoda (Yugui)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
5 messages
2010/07/11
[#47263] Structに型宣言/型変換を組み込みたい — "MISHIMA, Hiroyuki" <missy@...>
長崎大の三嶋と申します。
5 messages
2010/07/29
[ruby-list:47205] Re: 今 def 文を実行すると、メソッドが定義されるクラス、にアクセスする方法
From:
"KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
Date:
2010-07-02 10:42:07 UTC
List:
ruby-list #47205
きしもとです
> 内部的にはcrefと呼ばれている値だろうと思いますが、これをrubyレベ
> ルから直接知る方法はありません。
ヒントありがとうございました。とりあえずでっちあげてみました。
こんなスクリプトを、下のパッチを当てた ruby で実行すると、
$ cat foo.rb
foo = Object.new
foo.instance_eval {
p cref
}
class Foo
p cref
def foo
p cref
class << self
p cref
end
end
end
foo = Foo.new
foo.foo
こうなります。
$ ruby19 foo.rb
#<Class:#<Object:0x000008011696e0>>
Foo
Foo
#<Class:#<Foo:0x00000801169528>>
求めていたものは得られました。おさわがせしました。
以下パッチ
diff --git a/object.c b/object.c
index f52522d..9d98f88 100644
--- a/object.c
+++ b/object.c
@@ -538,6 +538,15 @@ rb_obj_tap(VALUE obj)
}
+VALUE rb_vm_cref_cls(void);
+
+VALUE
+rb_cref(VALUE obj)
+{
+ return rb_vm_cref_cls();
+}
+
+
/*
* Document-method: inherited
*
@@ -2554,6 +2563,8 @@ Init_Object(void)
rb_define_method(rb_mKernel, "is_a?", rb_obj_is_kind_of, 1);
rb_define_method(rb_mKernel, "tap", rb_obj_tap, 0);
+ rb_define_method(rb_mKernel, "cref", rb_cref, 0);
+
rb_define_global_function("sprintf", rb_f_sprintf, -1); /* in sprintf.c */
rb_define_global_function("format", rb_f_sprintf, -1); /* in sprintf.c */
diff --git a/vm.c b/vm.c
index dd5de1f..0327c49 100644
--- a/vm.c
+++ b/vm.c
@@ -822,6 +822,12 @@ rb_vm_cref(void)
return vm_get_cref(cfp->iseq, cfp->lfp, cfp->dfp);
}
+VALUE
+rb_vm_cref_cls(void)
+{
+ return rb_vm_cref()->nd_clss;
+}
+
#if 0
void
debug_cref(NODE *cref)