Actions
Bug #10488
closedConsistency of Module#const_defined? and constant lookup
Description
Currently, if for some module mod
and constant Const
,
mod.const_defined?(:Const)
is true does not imply mod::Const
is not an error.
This is inconsistent for at least the following cases:
-
if mod is a Module but not a class,
const_defined?
will look inObject
and its ancestors, but constant access (::) will not look inObject
or above.Enumerable.const_defined? :String Enumerable::String #=> NameError: uninitialized constant Enumerable::String
-
if
Const
is private,const_defined?
will return true whilemod::Const
will raise an error.C = 42 Object.private_constant :C String.const_defined? :C #=> true String::C #=> NameError: private constant String::C referenced # This works, but is due to the lexical scope lookup class String C #=> 42 end
Is this intended?
Should it not mirror the behavior of defined?(mod::Const)
?
Or the behavior of method_defined?
Actions
Like0
Like0Like0Like0