Ruby 3.2 アドベントカレンダーの16日目の記事です。
リファインメント
Module#used_refinements
Module.used_refinements
が追加された。現在のスコープで有効な Refinement オブジェクトを返す。
module Hoge refine Integer do end end module Fuga refine String do end end Module.used_refinements #=> [] using Hoge Module.used_refinements #=> [#<refinement:Object@Hoge>] using Fuga Module.used_refinements #=> [#<refinement:Object@Fuga>, #<refinement:Object@Hoge>]
Module#refinements と Refinement#refined_class
Feature #12737: Module#defined_refinements - Ruby master - Ruby Issue Tracking System
Module#refinements
はモジュール内で定義されている Refinement オブジェクトを返す。
module Hoge refine Integer do end refine String do end end Hoge.refinements #=> [#<refinement:Integer@Hoge>, #<refinement:String@Hoge>]
Refinement#refined_class
はリファインされてるクラスを返す。
module Hoge refine Integer do end refine String do end end r1, r2 = Hoge.refinements r1.refined_class #=> Integer r2.refined_class #=> String