[ruby-core:103057] [Ruby master Feature#17753] Add Module#outer_scope
From:
eregontp@...
Date:
2021-03-27 11:33:33 UTC
List:
ruby-core #103057
Issue #17753 has been updated by Eregon (Benoit Daloze).
@sawa I'd say first assignment to a named constant wins, just like for Module#name.
I agree with the feature.
I'd suggest `Module#namespace` for the name though.
For example, I'd say the namespace of `Process::Status` is `Process`.
`scope` feels general to me, and there are many other scopes, so I think namespace is a more precise term for it.
`namespace` is also the term used in https://github.com/ruby/ruby/blob/master/doc/syntax/modules_and_classes.rdoc#label-Modules
----------------------------------------
Feature #17753: Add Module#outer_scope
https://bugs.ruby-lang.org/issues/17753#change-91118
* 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)
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>