Project

General

Profile

Bug #11294

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

~~~ruby ~~~ 
 module Foo; end 
 module Foo::Baz; end 
 module Bar; end 
 module Bar::Qux; end 

 Object.const_get "Foo::Baz::Bar::Qux" 
 # => Bar::Qux 
 ~~~ 

 Why on earth it is found at all? 
 It seems pretty weird to me. 

 The real problem arises later, when I add `Foo::Bar::Qux`: 

 ~~~ruby ~~~ 
 module Foo::Bar; end 
 module Foo::Bar::Qux; end 
 ~~~ 

 then the tree becomes as following: 

 ~~~ruby ~~~ 
 Foo::Bar::Qux 
 Foo::Baz 
 Bar::Qux 
 ~~~ 

 But the result remains the same: 

 ~~~ruby ~~~ 
 Object.const_get "Foo::Baz::Bar::Qux" 
 # => Bar::Qux 
 ~~~ 

 Here I'd expect searching `"Foo::Baz::Bar::Qux"` "Foo::Baz::Bar::Qux" to 

  

 * either return nothing (this is less astonished, because there is no such constant), 
 * or find the closest `Bar::Qux` to `Foo::Bar`, that is `Foo::Bar::Qux`, not the `Bar::Qux` 

 I cannot even understand the logic that follows the `Object.const_get` in providing such a result. 

Back