[ruby-core:122241] [Ruby Bug#21364] Constant lookup in namespaces should be consistent

Issue #21364 has been reported by tenderlovemaking (Aaron Patterson). ---------------------------------------- Bug #21364: Constant lookup in namespaces should be consistent https://bugs.ruby-lang.org/issues/21364 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * ruby -v: ruby 3.5.0dev (2025-05-22T23:07:21Z rm-assertion 17e71c7a24) +PRISM [arm64-darwin24] * Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN ---------------------------------------- This might be related to #21363, but I'm not sure. I expect that a top level `Bar` constant should have the same value as `Object::Bar`. For example: ```ruby File.binwrite("ns.rb", <<-RUBY) # namespace 3 Bar = 123 module M def self.test p Bar: Bar p "Object::Bar": Object::Bar end TEST = -> { p Bar: Bar p "Object::Bar": Object::Bar } end RUBY Bar = 456 ns = Namespace.new ns.load "./ns.rb" ns::M.test ns::M::TEST.call ``` The output is this: ``` RUBY_NAMESPACE=1 ./miniruby test.rb ./miniruby: warning: Namespace is experimental, and the behavior may change in the future! See doc/namespace.md for known issues, etc. {Bar: 123} {"Object::Bar": 123} {Bar: 123} {"Object::Bar": 456} ``` But I expected this: ``` {Bar: 123} {"Object::Bar": 123} {Bar: 123} {"Object::Bar": 123} ``` Constant lookups in methods seem to behave differently than in lambdas. -- https://bugs.ruby-lang.org/
participants (1)
-
tenderlovemaking (Aaron Patterson)