What exactly is the singleton class in ruby? What exactly is the singleton class in ruby? ruby ruby

What exactly is the singleton class in ruby?


First, a little definition: a singleton method is a method that is defined only for a single object. Example:

irb(main):001:0> class Foo; def method1; puts 1; end; end=> nilirb(main):002:0> foo = Foo.new=> #<Foo:0xb79fa724>irb(main):003:0> def foo.method2; puts 2; end=> nilirb(main):004:0> foo.method11=> nilirb(main):005:0> foo.method22=> nilirb(main):006:0> other_foo = Foo.new=> #<Foo:0xb79f0ef4>irb(main):007:0> other_foo.method11=> nilirb(main):008:0> other_foo.method2NoMethodError: undefined method `method2' for #<Foo:0xb79f0ef4>        from (irb):8

Instance methods are methods of a class (i.e. defined in the class's definition). Class methods are singleton methods on the Class instance of a class -- they are not defined in the class's definition. Instead, they are defined on the singleton class of the object.

irb(main):009:0> Foo.method_defined? :method1=> trueirb(main):010:0> Foo.method_defined? :method2=> false

You open the singleton class of an object with the syntax class << obj. Here, we see that this singleton class is where the singleton methods are defined:

irb(main):012:0> singleton_class = ( class << foo; self; end )=> #<Class:#<Foo:0xb79fa724>>irb(main):013:0> singleton_class.method_defined? :method1=> trueirb(main):014:0> singleton_class.method_defined? :method2=> trueirb(main):015:0> other_singleton_class = ( class << other_foo; self; end )=> #<Class:#<Foo:0xb79f0ef4>>irb(main):016:0> other_singleton_class.method_defined? :method1=> trueirb(main):017:0> other_singleton_class.method_defined? :method2=> false

So an alternative means of adding singleton methods to an object would be to define them with the object's singleton class open:

irb(main):018:0> class << foo; def method3; puts 3; end; end=> nilirb(main):019:0> foo.method33=> nilirb(main):022:0> Foo.method_defined? :method3=> false

In summary:

  • methods must always belong to a class (or: be instance methods of some class)
  • normal methods belong to the class they're defined in (i.e. are instance methods of the class)
  • class methods are just singleton methods of a Class
  • singleton methods of an object are not instance methods of the class of the object; rather, they are instance methods of the singleton class of the object.


Ruby provides a way to define methods that are specific to a particular object and such methods are known as Singleton Methods. When one declares a singleton method on an object, Ruby automatically creates a class to hold just the singleton methods. The newly created class is called Singleton Class.

    foo = Array.new    def foo.size      "Hello World!"    end    foo.size  # => "Hello World!"    foo.class # => Array    #Create another instance of Array Class and call size method on it    bar = Array.new    bar.size  # => 0
Singleton class is object specific anonymous class that is automatically created and inserted into the inheritance hierarchy.

singleton_methods can be called on an object to get the list of of names for all of the singleton methods on an object.

    foo.singleton_methods  # => [:size]    bar.singleton_methods  # => []

This article really helped me to understand Singleton Classes in Ruby and it has a good code example.


As just update to @Pistos answer, from version 1.9.2 ruby add new syntax to getting singleton class

 singleton_class = ( class << foo; self; end )

can be replaced with:

singleton_class = foo.singleton_class

https://apidock.com/ruby/Object/singleton_class