NoMethodError: is an class derived from exception, is an exception. In a strong dynamically typed language if you try to use a method on types for which that method doesn't exist you throw a bad type exception.
method_missing is a function
-http://ruby-doc.org/core/classes/Kernel.html#M005925
Invoked by Ruby when obj is sent a
message it cannot handle. symbol is
the symbol for the method called, and
args are any arguments that were
passed to it. By default, the
interpreter raises an error when this
method is called. However, it is
possible to override the method to
provide more dynamic behavior. The
example below creates a class Roman,
which responds to methods with names
consisting of roman numerals,
returning the corresponding integer
values.
I think(don't trust me on this) the default method_missing function does something like a NoMethodError with the message "undefined method `#{method_name}' for #{inspectVariableValue}:#{ClassName}".