以下の内容はhttps://secret-garden.hatenablog.com/entry/2020/01/12/183729より取得しました。


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

べんり。




以上の内容はhttps://secret-garden.hatenablog.com/entry/2020/01/12/183729より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14