That just means that you need something like the BlankSlate class,
(http://jimweirich.umlcoop.net/index.cgi/Tech/Ruby/BlankSlate.rdoc)
which doesn't inherit all of the default methods from Object. That
way, even built-in methods pass through to the delayed object.

There's also a hack I remember seeing out there somewhere that allows
one object to "become" another, so the DelayedInstance would actually
adopt the identity of the instantiated object, removing the additional
indirection on each method call.

Of course, an argument could be made that it's good to have some
indication that you're dealing with a proxy object, and let some
methods from that object stay exposed.

The bigger problem with this simple example is that it breaks the
"duck typing" idiom; using 'method_missing' indirection (esp. if
built-in methods are removed, as I suggest above) will give misleading
results if you call 'responds_to?'. You should be able to fix it by
overriding 'responds_to?' in the DelayedInstance class, and checking
the methods of your @object, instead of the proxy.

Lennon