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_は上書きされない。