From: MOROHASHI Kyosuke Date: 2009-02-15T20:08:45+09:00 Subject: [ruby-dev:38021] 無名クラス中で定義された定数の扱いに付いて もろはしです。 いつもお世話になっております。 Ruby 1.8.7とRuby 1.9.1p0では、無名クラス中で宣言した定数の扱いが 異なっています。これは仕様でしょうか? # /tmp/anon_class_const.rb class Foo; end foo = Class.new(Foo){ Bar = "hoge" } p [defined?(::Foo::Bar), defined?(::Bar), defined?(foo::Bar)] # -- ここまで -- $ ruby -v /tmp/anon_class_const.rb ruby 1.8.7 (2008-08-11 patchlevel 72) [i686-darwin9] ["constant", "constant", "constant"] $ ruby19 -v /tmp/anon_class_const.rb ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-darwin9] [nil, nil, "constant"] 1.8.7では::Barとして定義されるようですが、1.9では無名クラスの中でしか 定義されません。 RSpecなどで、これが原因と思われるテスト失敗がいくつかあるため、 どちらで修正するのがよいのか迷っております。 # 変更でギャっとはしましたが、1.9の挙動のほうが個人的には納得できます。 -- 諸橋 恭介(もろはし きょうすけ) 本を書きました!! 「Railsレシピブック」http://www.amazon.co.jp/dp/4797336625 mail : moronatural@gmail.com はてな: http://d.hatena.ne.jp/moro/ twitter: http://twitter.com/moro