Una classe singleton nei termini più semplici è una classe speciale che ruby crea per ospitare metodi definiti su singoli oggetti. In ruby, è possibile definire metodi su singoli oggetti che sono unici per quell'oggetto da solo. Ad esempio, considera quanto segue di seguito
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Come puoi vedere sopra, l'oggetto user1 non risponde al metodo "age" perché è un metodo singleton, un metodo definito in modo univoco sull'oggetto utente. Affinché ciò avvenga, ruby crea una classe speciale, chiamata classe singleton o eigenclass, per ospitare questo metodo univoco. Puoi verificarlo procedendo come segue:
user.singleton_class
Puoi anche chiedere a ruby se il metodo "age" si trova qui utilizzando l'oggetto metodo per scoprire dove è definito il metodo "age". Quando lo fai, vedrai che la classe singleton ha quel metodo.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
Si noti inoltre che, per quanto riguarda una classe singleton, i metodi singleton sono in realtà metodi di istanza.
user.singleton_methods == user_singleton_class.instance_methods(false)