もろはしです。
いつもお世話になっております。
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