[#45906] ' failures. — Tanaka Akira <akr@...>
' の扱いが変化したことで、テストが失敗しているようです。
9 messages
2012/07/04
[#45910] [ruby-trunk - Bug #6694][Open] Thread.new without block. — "ko1 (Koichi Sasada)" <redmine@...>
24 messages
2012/07/04
[#45928] Re: [ruby-cvs:43524] kosaki:r36348 (trunk): * include/ruby/ruby.h: Removed RUBY_GLOBAL_SETUP complely. It is — SASADA Koichi <ko1@...>
ささだです.
3 messages
2012/07/09
[#45973] [ruby-trunk - Bug #6751][Assigned] remove tempfiles early. — "akr (Akira Tanaka)" <akr@...>
4 messages
2012/07/18
[#45976] [ruby-trunk - Bug #6756][Open] FileUtils.rm_rf がアクセス権のない空ディレクトリを削除しない — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>
9 messages
2012/07/20
[#45977] [ruby-trunk - Feature #6757][Open] [PATCH] Add Process.getsid — "fumiyas (Fumiyasu SATOH)" <fumiyas@...>
6 messages
2012/07/20
[#46012] [ruby-trunk - Feature #6812][Open] Refactor gc.c — "authorNari (Narihiro Nakamura)" <authorNari@...>
13 messages
2012/07/30
[ruby-dev:45997] [ruby-trunk - Feature #4043][Rejected] グローバル関数current_classの提案
From:
"mame (Yusuke Endoh)" <mame@...>
Date:
2012-07-23 13:21:59 UTC
List:
ruby-dev #45997
Issue #4043 has been updated by mame (Yusuke Endoh). Status changed from Assigned to Rejected きしもとさん 7/21 の開発者会議にて、残念ながらこの機能は不採択と判定されました。 以下の 3 つの理由によります。 * 「Ruby の理解が進む」というユースケースは弱い * Module のクラスメソッドはいまいち (Module.nesting で後悔したそうです) * implementation detail なので他実装で同等に実装できないかもしれない - 具体的には mruby で困るらしい -- Yusuke Endoh <[email protected]> ---------------------------------------- Feature #4043: グローバル関数current_classの提案 https://bugs.ruby-lang.org/issues/4043#change-28312 Author: metanest (Makoto Kishimoto) Status: Rejected Priority: Low Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 2.0.0 =begin カレントクラス(MRIの内部でいうところのcref)をRubyから調べられるメソッドcurrent_classを提案します。 グローバル関数(Kernelのプライベートメソッド)にする理由は、self(ないしなんらかのオブジェクト)とは関係ない値を返すメソッドであるため、です。 ユースケースですが、例えば以下のようにして、モジュールのinstance_evalとmodule_evalの違いをRubyプログラマが確かめることができ、Rubyの理解に役立ちます。 $ irb19 irb(main):001:0> module M ; end => nil irb(main):002:0> M.instance_eval { current_class } => #<Class:M> irb(main):003:0> M.module_eval { current_class } => M 差分を付けますが、クイックハックですので修正が必要かと思います。 diff --git a/object.c b/object.c index 75192c1..82ad85a 100644 --- a/object.c +++ b/object.c @@ -2408,6 +2408,13 @@ rb_f_array(VALUE obj, VALUE arg) return rb_Array(arg); } +VALUE rb_vm_cref_cls(void); +static VALUE +rb_f_current_class(VALUE obj) +{ + return rb_vm_cref_cls(); +} + /* * Document-class: Class * @@ -2588,6 +2595,8 @@ Init_Object(void) rb_define_global_function("String", rb_f_string, 1); rb_define_global_function("Array", rb_f_array, 1); + rb_define_global_function("current_class", rb_f_current_class, 0); + rb_cNilClass = rb_define_class("NilClass", rb_cObject); rb_define_method(rb_cNilClass, "to_i", nil_to_i, 0); rb_define_method(rb_cNilClass, "to_f", nil_to_f, 0); diff --git a/vm.c b/vm.c index 980e7ea..dcc43df 100644 --- a/vm.c +++ b/vm.c @@ -819,6 +819,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) =end -- http://bugs.ruby-lang.org/