From: fxn@... Date: 2021-04-13T09:37:06+00:00 Subject: [ruby-core:103418] [Ruby master Feature#17753] Add Module#namespace Issue #17753 has been updated by fxn (Xavier Noria). BTW, we were discussing yesterday with Aaron that the flag I am raising is about the name `namespace`. What we are defining here is, given a class object is: 1. If the class object is anonymous, return `nil`. 2. Othwerwise, it was assigned to a constant at least once. Let `namespace` be the module object that stored that constant at assignment time if it is an alive object, `nil` if the original object is gone (possible depending on whether the reference is weak or not). We do not have a good name for that. Another thing Aaron is exploring is to define `Module#namespaces`, which would return all modules that store the class object in one of their constants. That is a bit closer to the Ruby model, I believe. ---------------------------------------- Feature #17753: Add Module#namespace https://bugs.ruby-lang.org/issues/17753#change-91509 * 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: