From: "sawa (Tsuyoshi Sawada)" Date: 2022-07-02T05:01:21+00:00 Subject: [ruby-core:109114] [Ruby master Feature#17753] Add Module#namespace Issue #17753 has been updated by sawa (Tsuyoshi Sawada). @ioquatix (Samuel Williams) The non-negative part of your code looks pretty much convoluted. To simplify your code (and define it on `Module` rather than on `Class`), it would be essentially this: ```ruby Module.prepend(Module.new do def name(offset = nil) return super() unless offset super().split('::').then do |parts| if offset >= 0 parts.last(offset + 1) else parts[...offset] end end.join('::') end end) ``` This indicates that you are essentially using the argument `offset`: * to specify the **number** of elements when `offset` is non-negative, and * to specify the ending **position** (index) of the elements otherwise. which is incoherent. At least to me, your proposal is in fact difficult to understand because of this. I think it should be unified so that either `offset` expresses the number all the way down, or it does the position all the way down. ---------------------------------------- Feature #17753: Add Module#namespace https://bugs.ruby-lang.org/issues/17753#change-98260 * 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: