From: "Eregon (Benoit Daloze)" Date: 2022-03-10T16:08:54+00:00 Subject: [ruby-core:107831] [Ruby master Feature#11547] remove top-level constant lookup Issue #11547 has been updated by Eregon (Benoit Daloze). There is some inconsistency here between literal constant lookup and the meta API (const_get). `const_get` still looks in Object, even though that's confusing, inconsistent and IMHO shouldn't really happen. ```ruby module ConstantSpecsTwo Foo = :cs_two_foo end module ConstantSpecs end p ConstantSpecs.const_get("ConstantSpecsTwo::Foo") # => :cs_two_foo p ConstantSpecs::ConstantSpecsTwo::Foo # => const_get.rb:9:in `
': uninitialized constant ConstantSpecs::ConstantSpecsTwo (NameError) ``` ---------------------------------------- Feature #11547: remove top-level constant lookup https://bugs.ruby-lang.org/issues/11547#change-96759 * Author: gucki1 (Corin Langosch) * Status: Closed * Priority: Normal ---------------------------------------- If ruby cannot find a class in the specified scope it uses the top-level constant of the same name if it exists and emits a warning: ~~~ irb(main):006:0> class Auth; end => nil irb(main):007:0> class Twitter; end => nil irb(main):008:0> Twitter::Auth (irb):8: warning: toplevel constant Auth referenced by Twitter::Auth => Auth ~~~ In some cases this is not playing nicely with rails autoloading as can be seen here: https://github.com/rails/rails/issues/6931. Many more issues like this exist. Imo I don't see any reason why this fallback makes any sense. So I'd like to suggest to remove it completely or at least add an option to disable it. -- https://bugs.ruby-lang.org/ Unsubscribe: