Call Dynamic Method in Ruby
I love Ruby's syntax for method calls. The syntax for calling dynamic methods is pretty nice, and it's easily mastered.
send
method
The send
method is one of the best and most basic ways to call a method dynamically on your object. Let's say we have an object with multiple methods like this:
class Fezzik
def show_sportsmanship
end
def be_colossus_for(person_1, person_2=nil, person_3=nil)
end
end
The method you want to call might be represented as a string or a symbol. Your method call might look like this:
Fezzik.new.send(:show_sportsmanship)
# or
Fezzik.new.send("show_sportsmanship")
Calling send
with parameters
Now, some of your methods might have parameters. How are those called? Simply pass the argument values into the send
call as the final argument, which is a variable length argument:
just_one_person = Person.new
Fezzik.new.send(:be_colossus_for, just_one_person)
You can also pass the parameters as a splat array, such as this:
people = [Person.new, Person.new, Person.new]
Fezzik.new.send(:be_colossus_for, *people)
In Ruby, the splat operator destructures the array into parameters, so the above code essentially becomes:
people = [Person.new, Person.new, Person.new]
Fezzik.new.send(:be_colossus_for, people[0], people[1], people[2])
So, send
turns out to be pretty easy to deal with and really useful. Use it, and be happy.