DEV Community

Cover image for About Ruby's Singleton Classes and Singleton Methods
Kenta Takeuchi
Kenta Takeuchi

Posted on • Originally published at bmf-tech.com

About Ruby's Singleton Classes and Singleton Methods

This article was originally published on bmf-tech.com.

Overview

This post discusses Ruby's singleton classes and singleton methods.

Singleton Classes

A singleton class refers to a class that is only valid for a specific object.

class Greet
  def say_hi
    puts 'Hi'
  end
end

greet = Greet.new

# Singleton Class
class << greet
  # Singleton Method
  def say_bye
    puts 'Bye'
  end
end

greet.say_hi # => Hi
greet.say_bye # => Bye
p greet.singleton_methods # => [:say_bye]
singleton_class = greet.singleton_class
puts singleton_class # => #<Class:#<Greet:0x00007f8b1b0>>
Enter fullscreen mode Exit fullscreen mode

Singleton Methods

A singleton method is a method that is only valid for a specific object.

class Greet
  def self.say_hi
    puts "Hi"
  end
end

Greet.say_hi # => Hi

obj = Greet.new

# Singleton Method
def obj.say_bye
  puts "Bye"
end

obj.say_bye # => Bye
p obj.singleton_methods # => [:say_bye]
Enter fullscreen mode Exit fullscreen mode

Since singleton methods are methods that only a specific object possesses, they are only valid for that object.

class Greet; end

obj1 = Greet.new
obj2 = Greet.new

def obj1.say_hi
  puts "Hi"
end

obj1.say_hi # Hi
obj2.say_hi # NoMethodError
Enter fullscreen mode Exit fullscreen mode

Class methods are essentially singleton methods.

class Greet
  # Class Method Definition
  class << self
    def say_hi
      puts "Hello"
    end
  end
end

puts Greet.say_hi

# Class methods can also be defined outside the class definition
class Greet; end
class << Greet
  def say_hi
    puts "Hello"
  end
end

puts Greet.say_hi

# Class methods can also be defined as follows
class Greet
  def self.say_hi
    puts "Hi"
  end
end
Enter fullscreen mode Exit fullscreen mode

References

Top comments (0)