
Issue #21335 has been updated by mame (Yusuke Endoh). As the current behavior of the backtrace, if the receiver class is completely bound to the constant names, they are prefixed to the method names in the backtrace. So, if you do: ```ruby NS1 = Namespace.new NS1.load "foo.rb" NS2 = Namespace.new NS2.load "foo.rb" NS1::Foo.test(NS1, NS2, 10) ``` you will see: ``` $ RUBY_NAMESPACE=1 ./miniruby test.rb ./miniruby: warning: Namespace is experimental, and the behavior may change in the future! See doc/namespace.md for know issues, etc. foo.rb:9:in 'NS1::Foo.test' foo.rb:7:in 'NS2::Foo.test' foo.rb:9:in 'NS1::Foo.test' foo.rb:7:in 'NS2::Foo.test' foo.rb:9:in 'NS1::Foo.test' foo.rb:7:in 'NS2::Foo.test' foo.rb:9:in 'NS1::Foo.test' foo.rb:7:in 'NS2::Foo.test' foo.rb:9:in 'NS1::Foo.test' foo.rb:7:in 'NS1::Foo.test' test.rb:23:in '<main>' ``` This depends on the output of `Class#name`, so the result may change depending of the progress of #21316. ---------------------------------------- Feature #21335: Namespaces should be present in the backtrace https://bugs.ruby-lang.org/issues/21335#change-113234 * Author: tenderlovemaking (Aaron Patterson) * Status: Open ---------------------------------------- Namespaces can call in to other name spaces. I think it might be helpful if namespace information is in the backtrace. For example: ```ruby File.binwrite "foo.rb", <<-eorb class Foo def self.test(ns1, ns2, count) if count == 0 puts caller else if count % 2 == 0 ns1::Foo.test(ns1, ns2, count - 1) else ns2::Foo.test(ns1, ns2, count - 1) end end end end eorb ns1 = Namespace.new ns1.load "foo.rb" ns2 = Namespace.new ns2.load "foo.rb" ns1::Foo.test(ns1, ns2, 10) ``` The output is like this: ``` See doc/namespace.md for known issues, etc. /Users/aaron/git/ruby/exe/ruby: warning: Namespace is experimental, and the behavior may change in the future! See doc/namespace.md for known issues, etc. /Users/aaron/git/ruby/foo.rb:9:in 'test' /Users/aaron/git/ruby/foo.rb:7:in 'test' /Users/aaron/git/ruby/foo.rb:9:in 'test' /Users/aaron/git/ruby/foo.rb:7:in 'test' /Users/aaron/git/ruby/foo.rb:9:in 'test' /Users/aaron/git/ruby/foo.rb:7:in 'test' /Users/aaron/git/ruby/foo.rb:9:in 'test' /Users/aaron/git/ruby/foo.rb:7:in 'test' /Users/aaron/git/ruby/foo.rb:9:in 'test' /Users/aaron/git/ruby/foo.rb:7:in 'test' ./test.rb:23:in '<main>' ``` `Foo.test` alternates between namespaces when calling a method, but you can't tell from the backtrace. I think we should include namespaces in the backtrace. -- https://bugs.ruby-lang.org/