What does send() do in Ruby?

Viewed 124978

Can someone please tell me what the following snippet

obj.send("#{method_name}")

is and does?

7 Answers

What does send do?

send is another way of "calling a method". Example:

o = Object.new
o.to_s # => "#<Object:0x00005614d7a24fa3>"
# is equivalent to:
o.send(:to_s) # => "#<Object:0x00005614d7a24fa3>"

Send lives in the Object class.

What is the benefit of this?

The benefit of this approach is that you can pass in the method you want to call as a parameter. Here is a simple example:

def dynamically_call_a_method(method_name)
    o = Object.new
    o.send method_name
end
dynamically_call_a_method(:to_s) # => "#<Object:0x00005614d7a24fa3>"

You can pass in the method you want to be called. In this case we passed in :to_s. This can be very handy when doing ruby metaprogramming, because this allows us to call different methods according to our different requirements.

Send can also be used as a way of showing how everything in Ruby is an object

1.send(:+, 1)  ## -> 2
3.send(:*, 2)  ## -> 6
Related