alias_method is faster than what he did before because he's replicating a bunch of internal logic at run-time, e.g., binding "self" to the correct thing. Somewhere deep in the bowels of the Ruby interpreter it's going to be doing the same thing, except it has the opportunity to create the binding statically at define-time. Likewise, he's calling a method on a Method object to invoke the original method vs. invoking the original method directly.<p>This might speed things up a little more, too:<p><pre><code> alias_method :"original_#{name}", name
class_eval %{
def #{name}(*args)
self.original_#{name}(*args)
end
}
</code></pre>
"send" is going to be using extra machinery in the same way, although I think "send" also circumvents certain protections like public/private, so I'm not 100% sure where in the Ruby method invocation process it fits in. "send" might be closer to the metal, but a pre-defined method name would have the opportunity to cache certain things in the invocation process.