Skip to content
On this page

Maintenance Ruby 3.3 gets fixes, but no new features. Switch to Ruby 4.0 →

class · Ruby 3.3

UnboundMethod

< Object 15 instance methods

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.

Example
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   #=> 144

Unbound 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.

Example
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   #=> :original

Instance methods 15

Ruby version changes 3

  1. 3.2
    • UnboundMethod#== returns true if the actual method is same. For example, String.instance_method(:object_id) == Array.instance_method(:object_id) returns true. [Feature #18798]

    • UnboundMethod#inspect does not show the receiver of instance_method. For example String.instance_method(:object_id).inspect returns "#<UnboundMethod: Kernel#object_id()>" (was "#<UnboundMethod: String(Kernel)#object_id()>").

  2. 3.1