Class: UnboundMethod
Overview
Ruby supports two forms of objectified methods. ::Class ::Method 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.
class Square
  def area
    @side * @side
  end
  def initialize(side)
    @side = side
  end
end
area_un = Square.instance_method(:area)
s = Square.new(12)
area = area_un.bind(s)
area.call   #=> 144Unbound methods are a reference to the method at the time it was objectified: subsequent changes to the underlying class will not affect the unbound method.
class Test
  def test
    :original
  end
end
um = Test.instance_method(:test)
class Test
  def test
    :modified
  end
end
t = Test.new
t.test            #=> :modified
um.bind(t).call   #=> :originalInstance Method Summary
- 
    
      #==(other_meth)  ⇒ Boolean 
      (also: #eql?)
    
    Alias for Method#==. 
- 
    
      #arity  ⇒ Fixnum 
    
    Alias for Method#arity. 
- 
    
      #bind(obj)  ⇒ method 
    
    Bind umeth to obj. 
- 
    
      #clone  ⇒ Method 
    
    Alias for Method#clone. 
- 
    
      #eql?(other_meth)  ⇒ Boolean 
    
    Alias for #==. 
- 
    
      #hash  ⇒ Integer 
    
    Alias for Method#hash. 
- 
    
      #to_s  ⇒ String 
    
    Alias for Method#inspect. 
- 
    
      #name  ⇒ Symbol 
    
    Alias for Method#name. 
- 
    
      #original_name  ⇒ Symbol 
    
    Alias for Method#original_name. 
- 
    
      #owner  ⇒ class_or_module 
    
    Alias for Method#owner. 
- 
    
      #parameters  ⇒ Array 
    
    Alias for Method#parameters. 
- 
    
      #source_location  ⇒ Array, Fixnum 
    
    Alias for Method#source_location. 
- 
    
      #super_method  ⇒ Method 
    
    Alias for Method#super_method. 
- 
    
      #to_s  
    
    Alias for Method#inspect. 
Instance Method Details
    #==(other_meth)  ⇒ Boolean     Also known as: #eql?
  
Alias for Method#==.
#arity ⇒ Fixnum
Alias for Method#arity.
    #bind(obj)  ⇒ method   
Bind umeth to obj. If Klass was the class from which umeth was obtained, obj.kind_of?(Klass) must be true.
class A
  def test
    puts "In test, class = #{self.class}"
  end
end
class B < A
end
class C < B
end
um = B.instance_method(:test)
bm = um.bind(C.new)
bm.call
bm = um.bind(B.new)
bm.call
bm = um.bind(A.new)
bm.callproduces:
In test, class = C
In test, class = B
prog.rb:16:in `bind': bind argument must be an instance of B (TypeError)
 from prog.rb:16#clone ⇒ Method
Alias for Method#clone.
    
      #==(other_meth)  ⇒ Boolean 
      #eql?(other_meth)  ⇒ Boolean 
    
  
Boolean 
      #eql?(other_meth)  ⇒ Boolean 
    Alias for #==.
#hash ⇒ Integer
Alias for Method#hash.
#to_s ⇒ String
Alias for Method#inspect.
#name ⇒ Symbol
Alias for Method#name.
#original_name ⇒ Symbol
Alias for Method#original_name.
    #owner  ⇒ class_or_module   
Alias for Method#owner.
#parameters ⇒ Array
Alias for Method#parameters.
#source_location ⇒ Array, Fixnum
Alias for Method#source_location.
#super_method ⇒ Method
Alias for Method#super_method.
#to_s
Alias for Method#inspect.