From: "shugo (Shugo Maeda)" Date: 2021-11-19T23:38:59+00:00 Subject: [ruby-core:106185] [Ruby master Feature#14332] Module.used_refinements to list refinement modules Issue #14332 has been updated by shugo (Shugo Maeda). Eregon (Benoit Daloze) wrote in #note-7: > For Module.used_refinements, I believe it has to be an Array, not a Hash. > We can see in the description: > ```ruby > p Module.used_refinements # => [#, #, #] > ``` > The refined classes are not unique, so we can't key by refined class. > And the order matters, so a `Hash[namespace => [refined classes]]` would be bad and needlessly complicated. Agreed. > Since the spec of `Module.used_refinements` seems clear, I suggest to add it soon. Matz, what do you think of it? https://github.com/shugo/ruby/compare/used_refinements ---------------------------------------- Feature #14332: Module.used_refinements to list refinement modules https://bugs.ruby-lang.org/issues/14332#change-94793 * Author: Eregon (Benoit Daloze) * Status: Assigned * Priority: Normal * Assignee: matz (Yukihiro Matsumoto) ---------------------------------------- Module.used_modules was added in #7418. But I think `Module.used_refinements` is more useful or at least complementary. Refinements were implemented in TruffleRuby, and I found Module.used_refinements so useful that I left it there. Instead of listing namespace modules (arguments to #using), it lists the refinement modules: ~~~ ruby module Json refine Integer do def to_json to_s end end refine String do def to_json inspect end end end module Fact refine Integer do def fact self <= 1 ? 1 : self * (self-1).fact end end end using Json p Module.used_modules # => [Json] p Module.used_refinements # => [#, #] using Fact p Module.used_modules # => [Json, Fact] p Module.used_refinements # => [#, #, #] ~~~ This shows which classes are refined and by which refinement namespace. It also shows if a class has multiple active refinements in the scope. And, last but not least, the name of the method contains "refinements". I find `used_modules` hard to remember and it doesn't sound related to refinements from the name (while looking at the Module's methods). -- https://bugs.ruby-lang.org/ Unsubscribe: