Backport #1915
closed
const_defined?の1.9との挙動の違いについて
Added by matsuda (Akira Matsuda) over 15 years ago.
Updated about 7 years ago.
Description
=begin
以下の場合に
% cat const_defined.rb
class Alpha
class Beta; end
end
class Gamma < Alpha; end
puts Gamma::const_get('Alpha')
puts Gamma::const_defined?('Alpha')
1.8と1.9ではそれぞれこうなります。
% ruby18 -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9]
% ruby18 const_defined.rb
Alpha
false
% ruby19 -v
ruby 1.9.1p129 (2009-05-12 revision 23412) [i386-darwin9.7.0]
% ruby19 const_defined.rb
Alpha
true
1.9から仕様が変更されたということなのかな、と思うのですが、これは1.8.xにバックポートされる予定はあるのでしょうか?
=end
=begin
この件に関して、先日の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点あって、
- Ruby 1.9の const_defined? は引数を2つ取れるように拡張されているが、この点に関しては1.8にバックポートされていない。
- 1.8の挙動(defined?やconst_getで見えてるのにconst_defined?では見えない)がなんだか矛盾しているように見える。
ということかと思われます。
=end
- Status changed from Open to Assigned
- Assignee set to knu (Akinori MUSHA)
Hello,
i have found that behavior in rubinius too. I fixed it, so that it worked like ruby 1.9, but broke the compatibility with 1.8.
Will this be fixed in the next version of 1.8?
- Project changed from Ruby 1.8 to Backport187
- Description updated (diff)
- Status changed from Assigned to Closed
Closing this, Ruby 1.8.7 had gone EOL over three years ago.
Also available in: Atom
PDF
Like0
Like0Like0Like0Like0