Ruby の private メソッドを特定のコンテキストで public にする
Ruby では次のように private
メソッドにすると『レシーバをつけたメソッド呼び出し』ができません。
class X private def value 42 end end x = X.new # error: private method `value' called for #<X:0x00007fabe905fa40> (NoMethodError) x.value
こういうときに refinements を使うと任意のコンテキストでのみ public
化することができます。
class X private def value 42 end end x = X.new # error # x.value # refinements を使って public 化する using Module.new { refine X do public :value end } # OK x.value
べんり。