Uma classe singleton nos termos mais simples é uma classe especial que o ruby leva para métodos hospedeiros definidos em objetos individuais. Em ruby, é possível definir métodos em objetos individuais que são exclusivos daquele objeto sozinho. Por exemplo, considere o seguinte
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Como você pode ver acima, o objeto user1 não responde ao método 'age' porque é um método singleton, um método definido exclusivamente no objeto do usuário. Para que isso aconteça, o ruby cria uma classe especial, chamada classe singleton, ou eigenclass, para hospedar esse método único. Você pode verificar isso fazendo o seguinte:
user.singleton_class
Você também pode perguntar a ruby se o método 'age' é encontrado aqui usando o objeto de método para descobrir onde o método 'age' está definido. Ao fazer isso, você verá que a classe singleton tem esse método.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
Observe também que, no que diz respeito a uma classe de singleton, os métodos de singleton são, na verdade, seus métodos de instância.
user.singleton_methods == user_singleton_class.instance_methods(false)