UnboundMethod

Ruby supports two forms of objectified methods. ClassMethod is used to represent
methods that are associated with a particular object: these method objects
are bound to that object. Bound method objects for an object can be created
using Object#method.

Ruby also supports unbound methods; methods objects that are not associated
with a particular object. These can be created either by calling
Module#instance_method or by calling unbind on a
bound method object. The result of both of these is an
UnboundMethod object.

Unbound methods can only be called after they are bound to an object. That
object must be a kind_of? the method's original class.

Returns an indication of the number of arguments accepted by a method.
Returns a nonnegative integer for methods that take a fixed number of
arguments. For Ruby methods that take a variable number of arguments,
returns -n-1, where n is the number of required arguments. For methods
written in C, returns -1 if the call takes a variable number of arguments.