String に新しいメソッドを定義する # これだけでは定義されない refine String do def twice self + self end end end # using を呼び出したコンテキストでのみメソッドが適⽤される using Twice p "homu".twice # => "homuhomu"
Twice block.call end using Proc::Refinements # ブロック内で独⾃のメソッド拡張が呼べる benri { p "homu".twice p "mami".twice.twice } # ブロックの外では使えない # error: : undefined method `twice' for "mado":String (NoMethodError) p "mado".twice