[#109207] [Ruby master Feature#18915] New error class: NotImplementedYetError or scope change for NotImplementedYet — Quintasan <noreply@...>
Issue #18915 has been reported by Quintasan (Michał Zając).
18 messages
2022/07/14
[ruby-core:109114] [Ruby master Feature#17753] Add Module#namespace
From:
"sawa (Tsuyoshi Sawada)" <noreply@...>
Date:
2022-07-02 05:01:21 UTC
List:
ruby-core #109114
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>