Una clase singleton en los términos más simples es una clase especial que ruby se adapta a métodos de host definidos en objetos individuales. En ruby, es posible definir métodos en objetos individuales que son exclusivos de ese objeto solo. Por ejemplo, considere lo siguiente a continuación
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Como puede ver arriba, el objeto user1 no responde al método 'age' porque es un método singleton, un método definido de forma única en el objeto del usuario. Para que esto suceda, ruby crea una clase especial, llamada clase singleton o clase propia, para alojar este método único. Puede verificar esto haciendo lo siguiente:
user.singleton_class
También puede preguntarle a ruby si el método 'edad' se encuentra aquí utilizando el objeto de método para averiguar dónde está definido el método 'edad'. Cuando hagas esto, verás que la clase singleton tiene ese método.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
También tenga en cuenta que, en lo que respecta a una clase singleton, los métodos singleton son en realidad sus métodos de instancia.
user.singleton_methods == user_singleton_class.instance_methods(false)