Rubyリファレンス: Home

public_send (Object)

Edit   History

Ruby 1.9

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

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

public_sendメソッドは、レシーバの持っているpublicなメソッドを呼び出します。引数や戻り値については、sendメソッドの説明をご覧ください。

sendとは異なり、public_sendメソッドはprivateなメソッドを呼び出せません。protectedなメソッドについては、同じクラスのインスタンスメソッドの中でなら呼び出せます。

class Cat
  def hello(n = nil)
    n ? Array.new(n, "meow!") : "meow!"
  end
  
  private
  def sleep
    "zzz..."
  end
end
 
cat = Cat.new
p cat.public_send(:hello, 3)
p cat.public_send(:sleep) rescue p $!
["meow!", "meow!", "meow!"]
#<NoMethodError: private method `sleep' called for #<Cat:0x13e0540>>

関連項目