As far as I am aware there are three ways to dynamically call a method in Ruby:
Method 1:
s = SomeObject.new
method = s.method(:dynamic_method)
metho
The whole point of send and eval is that you can change the command dynamically. If the method you want to execute is fixed, then you can hard-wire that method without using send or eval.
receiver.fixed_method(argument)
But when you want to invoke a method that varies or you do not know in advance, then you cannot write that directly. Hence the use of send or eval.
receiver.send(method_that_changes_dynamically, argument)
eval "#{code_to_evaluate_that_changes_more_dramatically}"
Additional use of send is that, as you noticed, you can call a method with explicit receiver using send.