Feature #7414
closedNow that const_get supports "Foo::Bar" syntax, so should const_defined?.
Description
class Foo
end
Object.const_get "Object::Foo" => Foo
Object.const_defined? "Object::Foo" => NameError (expected true).
Updated by robertgleeson (Robert Gleeson) over 8 years ago
I realise defined? with a constant works just as well but this is about API consistency.
I'd expect const_get & const_defined? to support the same syntax ("Object::Foo").
Updated by mame (Yusuke Endoh) over 8 years ago
- Status changed from Open to Assigned
- Assignee set to tenderlovemaking (Aaron Patterson)
Aaron, can you fix it easily?
--
Yusuke Endoh mame@tsg.ne.jp
Updated by sferik (Erik Michaels-Ober) over 8 years ago
I also noticed this inconsistency. It seems very odd to have different behavior for Module#const_get and Module#const_defined?. 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.
Updated by benolee (Ben Holley) over 8 years 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"?
Updated by nobu (Nobuyoshi Nakada) over 8 years ago
I vote for false in both cases, like defined? operator.
Updated by ko1 (Koichi Sasada) about 8 years ago
aaron, could you continue this discussion?
Updated by ko1 (Koichi Sasada) about 8 years ago
- Target version changed from 2.0.0 to 2.1.0
Updated by nobu (Nobuyoshi Nakada) over 7 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r44194.
Robert, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
object.c: nested path const_defined?
- object.c (rb_mod_const_defined): support nested class path as well as const_get. [Feature #7414]