sendと_send_

 

sendと_send_

sendメソッドとは

レシーバーが持っているメソッドを、文字列(またはシンボル)で指定して呼び出すことができる。

Object#send (Ruby 3.1 リファレンスマニュアル)

class Foo
  def bar?
    true
  end

  def send(*args)
    false
  end
end

foo = Foo.new
foo.send(:bar?)
# => false
foo.__send__(:bar?)
# => true

sendとの使い分け

sendは様々なクラスで使い回されているため、sendの本来の挙動を使用したい場合に_send_を使用する。

定数と変数のようなイメージ?sendはすでに他のクラスで上書き(メタプロ)されている可能性があって、_send_は上書きされない。

Ruby send vs send