ウェブエンジニア珍道中

日々の技術的に関する経験を書いていきます、脱線もします。

Rubyでprivateメソッドを無理やり呼び出す方法があった件

割と衝撃的だったのでメモ

方法

Object#sendメソッドを使います。

sample

class Hoge
  private def test_method
    puts "hoge"
  end
end

hoge = Hoge.new

hoge.test_method # エラー

hoge.send(:test_method) # 動く

用途

これを普通に使ってるとプロジェクトが崩壊すると思います。カプセル化とかそういう概念が無くなるととてもツラい。
今のところ見当たった用途はテストコードを書く時くらいです。他便利な用途があれば知見を下さいorz