I know send takes string or symbol with arguments while instance_eval takes string or block, and their difference could be apparent given receivers.
My question is what the 'under the hood' difference is for the example below?
1234.send 'to_s' # '1234'
1234.instance_eval 'to_s' # '1234'
From the fine manual:
and for
instance_eval:So
sendexecutes a method whereasinstance_evalexecutes an arbitrary block of code (as a string or block) withselfset to the object that you're callinginstance_evalon.In your case, there isn't much difference as the string you're handing to
instance_evalis just a single method. The main difference is that anyone reading your code (including you in six months) will be wondering why you're usinginstance_evalto call a single method.You might also be interested in
Object#public_sendandBasicObject#__send__