間接的にメソッドを呼び出す

def foo(x)
  p ["foo", x]
end

send( :foo, "send")
#=> ["foo", "send"]

v = "foo"
send( :"#{v}", "send-v")
#=> ["foo", "send-v"]

m = method( :foo)
m.call("method")
#=> ["foo", "method"]

p = lambda {|x| foo(x)}
p.call("proc")
#=> ["foo", "proc"]


class Bar
  def bar(x)
    p ["bar", x]
  end
end

Bar.new.method( :bar).call("method")
Bar.new.send( :bar, "send")