From: eregontp@... Date: 2021-07-26T11:12:48+00:00 Subject: [ruby-core:104680] [Ruby master Bug#17429] Prohibit include/prepend in refinement modules 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: