どなブロ

Ruby, Rails, Python, 機械学習, その他気になったこととか思ったこととか

【Ruby】メソッド名を動的に呼び出す

やりたいこと

  • メソッド名を動的に変更して呼び出したい
    ex)
Class Hoge
  def hoge_once
    puts "hoge."
  end

  def hoge_twice
    puts "hoge hoge."
  end
end

# 別のところで
def fuga
  times = # "once"か"twice"が入る

  # hoge.hoge_ + times
  # みたいな感じで動的に呼び出したい
end

解決方法

  • Object#sendを使う
    ex)
times = "once"
hoge.send("hoge_#{times}")  # => "hoge."
  • sendはprivateメソッドも呼び出せちゃう
  • なので一応public_send(privateメソッドは見れない)を使う
times = "once"
hoge.public_send("hoge_#{times}")  # => "hoge."

補足

感想