Rubyリファレンス: Home

send (Object)

Edit   History

標準クラス・モジュール > Object > send

obj.send(name, [arg, ...])

sendメソッドは、レシーバの持っているメソッドを呼び出します。第1引数nameにはメソッド名をシンボルか文字列で指定します。メソッドの引数を指定したいときは、第2引数arg以降に引数を並べます。戻り値は、呼び出したメソッドの戻り値が返ります。

__send__メソッドは、sendの別名です。

レシーバのクラスのメソッドだけでなく、親クラスやインクルードしているモジュールのメソッドも呼び出せます。レシーバがnameで指定したメソッドを持っていないときは、例外NoMethodErrorが発生します(あるいはmethod_missingが呼ばれます)。

sendはメソッドの可視性と関係なくメソッドを呼び出せることにご注意ください。つまり、sendprotectedなメソッドもprivateなメソッドも呼び出せます。この仕様はRuby 1.8でも1.9でも同じです。

class Cat
  def hello(n = nil)
    n ? Array.new(n, "meow!") : "meow!"
  end
  
  private
  def sleep
    "zzz..."
  end
end
 
cat = Cat.new
p cat.send(:hello)
p cat.send(:hello, 3)
p cat.send(:sleep)
"meow!"
["meow!", "meow!", "meow!"]
"zzz..."

関連項目