Actions
Bug #21363
open`Namespace.current` should always return the Namespace in which it was defined
Status:
Open
Assignee:
-
Target version:
-
ruby -v:
ruby 3.5.0dev (2025-05-22T23:07:21Z rm-assertion 17e71c7a24) +PRISM [arm64-darwin24]
Description
I think Namespace.current
should always return the namespace in which it was defined. Here is an example to demonstrate what I mean:
File.binwrite("ns.rb", <<-RUBY)
# namespace 3
module M
def self.test
p Namespace.current
end
TEST = -> {
p Namespace.current
}
end
RUBY
ns = Namespace.new
ns.load "./ns.rb"
p Namespace.current
ns::M.test
ns::M::TEST.call
I expect the output of ns::M.test
and ns::M::TEST.call
to be the same. Instead the output is like this:
#<Namespace:2,user,main>
#<Namespace:3,user,optional>
#<Namespace:2,user,main>
I think a method and lambda defined in the same namespace should return the same value for Namespace.current
Updated by tenderlovemaking (Aaron Patterson) about 6 hours ago
To be more specific, given this program:
File.binwrite("ns.rb", <<-RUBY)
# namespace 3
module M
def self.test
p test: Namespace.current
end
TEST = -> {
p lambda: Namespace.current
}
end
RUBY
ns = Namespace.new
ns.load "./ns.rb"
p main: Namespace.current
ns::M.test
ns::M::TEST.call
I expect the following output:
{main: #<Namespace:2,user,main>}
{test: #<Namespace:3,user,optional>}
{lambda: #<Namespace:3,user,optional>}
But I got the following output:
{main: #<Namespace:2,user,main>}
{test: #<Namespace:3,user,optional>}
{lambda: #<Namespace:2,user,main>}
Actions
Like0
Like0