From: Akira Matsuda Date: 2009-08-14T20:46:58+09:00 Subject: [ruby-dev:39084] [Backport #1915] const_defined?の1.9との挙動の違いについて チケット #1915 が更新されました。 (by Akira Matsuda) この件に関して、先日のAsakusa.rbでいくつか判明したことがあるので追記します。 % cat const.rb class Alpha class Beta; end end class Gamma < Alpha puts defined?(Beta) end puts Gamma::const_get('Beta') puts Gamma::const_defined?('Beta') puts Gamma::Beta % ruby18 const.rb constant Alpha::Beta false Alpha::Beta % ruby19 const.rb constant Alpha::Beta true Alpha::Beta ただし、Ruby 1.9では、 puts Gamma::const_defined?('Beta') のところを puts Gamma::const_defined?('Beta', false) と書けば、1.8と同様にfalseになります。 つまり、問題は2点あって、 1. Ruby 1.9の const_defined? は引数を2つ取れるように拡張されているが、この点に関しては1.8にバックポートされていない。 2. 1.8の挙動(defined?やconst_getで見えてるのにconst_defined?では見えない)がなんだか矛盾しているように見える。 ということかと思われます。 ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1915 ---------------------------------------- http://redmine.ruby-lang.org