From: Yusuke Endoh Date: 2010-03-24T23:11:57+09:00 Subject: [ruby-dev:40743] [Bug #616](Closed) instance_eval and Module#to_s チケット #616 が更新されました。 (by Yusuke Endoh) ステータス OpenからClosedに変更 遠藤です。 2008年12月29日12:38 SASADA Koichi : > Shyouhei Urabe wrote:: >> Bug #616: instance_eval and Module#to_s >> http://redmine.ruby-lang.org/issues/show/616 >> >> 起票者: Shyouhei Urabe >> ステータス: Open, 優先度: Normal >> 担当者: Yukihiro Matsumoto, カテゴリ: core >> >> 以下のように、クラスの名前が1.8と違うことがあるようです。 >> >> % for i in trunk branches/ruby_1_8; do ~/target/$i/bin/ruby -ve 'instance_eval{p((C = Class.new).to_s)}'; done >> ruby 1.9.0 (2008-10-06 revision 17576) [x86_64-linux] >> "#" >> ruby 1.8.7 (2008-09-23 revision 17572) [x86_64-linux] >> "C" > >  これは,次の2つの問題に分けられます. > > (1) instance_eval{} 実行中の定数の定義先 > (2) 特異クラスコンテキスト中で定義されたクラス名 > > (1) は 1.9 の非互換,(2) は 1.8 からあった問題です. (1) の非互換は [ruby-core:26774] での Yehuda の説得により、1.8 の 挙動に戻されたと思います。 これによって、元の卜部さんの問題はすでに解決しています。 (2) の問題は o = Object.new class << o class C; end D = Class.new p [C, D] #=> [#::C, #] end の表示の一貫性のなさが気持ち悪いというだけの話だと思います。 このチケットだと何が問題かわかりにくいので、このチケットは一旦閉じ、 新しくチケットを作りたいと思います。 -- Yusuke ENDOH ---------------------------------------- http://redmine.ruby-lang.org/issues/show/616 ---------------------------------------- http://redmine.ruby-lang.org