Now that const_get supports "Foo::Bar" syntax, so should const_defined?.
Object.constget "Object::Foo" => Foo
Object.constdefined? "Object::Foo" => NameError (expected true).
#3 Updated by Erik Michaels-Ober over 1 year ago
I also noticed this inconsistency. It seems very odd to have different behavior for Module#constget and Module#constdefined?. I hope it's possible to get this change into 2.0.0. It's been a while since I've written any C but I'd be happy to contribute failing specs if that would be helpful.
#4 Updated by Ben Holley over 1 year ago
I have been working on a patch, but I have some questions about expected behavior.
In the case when the parent is missing, for example:
# Foo is missing Object.const_defined?("Foo::Bar")
should it return false? Or raise NameError for "Foo"? Or call Object.const_missing(:Foo)?
Second, in the case when the parent is not a Module or Class, for example:
Foo = Object.new Object.const_defined?("Foo::Bar")
should it return false? Or raise error "Foo is not a class/module"?
#8 Updated by Nobuyoshi Nakada 4 months ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100