💎
Ruby 3.2 - リファインメント
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
Discussion