Ruby-__send__について

Ruby __send__ とは

__send__はObjectのメソッドで、動的なメソッド呼び出しを可能とします。

実行時に呼び出すメソッドの名前を受け取って、対応するメソッドを呼び出すことができます。


sendメソッドでも、動的にメソッドを呼び出すことができますが、ライブラリでは__send__を使うべきであるとRubyリファレンスマニュアルに書いてあります。


send が再定義された場合に備えて別名 __send__ も用意されており、
ライブラリではこちらを使うべきです。
また __send__ は再定義すべきではありません。

__send__の実行例

以下はprivateメソッドを引数で指定して呼び出す例です。


#!/usr/bin/env ruby

class CommandExecuter
  def execute(cmd)
    __send__(cmd)
  end

  private
  def up
    puts "Up"
  end

  def down
    puts "Down"
  end

  def left
    puts "Left"
  end

  def right
    puts "Right"
  end
end

c = CommandExecuter.new
c.execute("up")
c.execute("down")
c.execute("left")
c.execute("right")



関連ページ