From: sawadatsuyoshi@... Date: 2021-03-28T06:05:45+00:00 Subject: [ruby-core:103069] [Ruby master Feature#17753] Add Module#outer_scope Issue #17753 has been updated by sawa (Tsuyoshi Sawada). This feature is reminiscent of `Module.nesting`. The difference is that the former has dynamic scope and the latter lexical scope. Besides that, I do not see any reason to make them different in any way. What about returning an array of the nested modules (perhaps including the current one) rather than just the direct parent? ```ruby module A; module B; class C; Module.nesting end end end # => [A::B::C, A::B, A] A::B::C.outer_scope # => [A::B::C, A::B, A] ``` ---------------------------------------- Feature #17753: Add Module#outer_scope https://bugs.ruby-lang.org/issues/17753#change-91132 * Author: tenderlovemaking (Aaron Patterson) * Status: Open * Priority: Normal ---------------------------------------- Given code like this: ```ruby module A module B class C; end class D; end end end ``` We can get from `C` to `B` like `C.outer_scope`, or to `A` like `C.outer_scope.outer_scope`. I want to use this in cases where I don't know the outer scope, but I want to find constants that are "siblings" of a constant. For example, I can do `A::B::C.outer_scope.constants` to find the list of "sibling" constants to `C`. I want to use this feature when walking objects and introspecting. For example: ```ruby ObjectSpace.each_object(Class) do |k| p siblings: k.outer_scope.constants end ``` I've attached a patch that implements this feature, and there is a pull request on GitHub [here](https://github.com/ruby/ruby/pull/4326). ---Files-------------------------------- 0001-Add-Module-outer_scope.patch (5.93 KB) 0001-Add-Module-namespace.patch (5.89 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: