[ruby-core:104680] [Ruby master Bug#17429] Prohibit include/prepend in refinement modules
From:
eregontp@...
Date:
2021-07-26 11:12:48 UTC
List:
ruby-core #104680
Issue #17429 has been updated by Eregon (Benoit Daloze).
Yes, I think that's completely fine.
In code, this should work:
```ruby
module Shared
A = 1
def foo
A
end
end
refine SomeClass do
import Shared
end
SomeClass.new.foo # => 1
```
And this should not:
```ruby
module Shared
def foo
A
end
end
refine SomeClass do
self::A = 1
import Shared
end
SomeClass.new.foo # => NameError
```
That would be the equivalent of dynamic rebinding or so, I think nobody expects that, the constant scope has always been lexical (+ ancestors of the first enclosing module).
Could you add tests (or better, specs under spec/ruby) for that?
Then I think it should be good to go.
----------------------------------------
Bug #17429: Prohibit include/prepend in refinement modules
https://bugs.ruby-lang.org/issues/17429#change-92995
* Author: shugo (Shugo Maeda)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN
----------------------------------------
include/prepend in refinement modules has implementation difficulties such as #17007 and #17379, and tends to be misleading like #17374.
How about to prohibit it in future versions?
Method copy like #17380 may be more convenient, but it's confusing to use names include and prepend because semantics is different from the original ones.
--
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>