Najprościej ujmując, klasa singleton jest specjalną klasą Ruby, która łączy się z metodami hosta zdefiniowanymi na poszczególnych obiektach. W języku ruby można zdefiniować metody na poszczególnych obiektach, które są unikalne tylko dla tego obiektu. Na przykład rozważ poniższe kwestie
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Jak widać powyżej, obiekt user1 nie reaguje na metodę „age”, ponieważ jest to metoda pojedyncza, metoda jednoznacznie zdefiniowana w obiekcie użytkownika. Aby tak się stało, Ruby tworzy specjalną klasę, zwaną klasą pojedynczą lub własną, która będzie hostować tę unikalną metodę. Możesz to sprawdzić, wykonując następujące czynności:
user.singleton_class
Możesz również zapytać ruby'ego, czy metoda „age” została tutaj znaleziona, używając obiektu method, aby dowiedzieć się, gdzie zdefiniowano metodę „age”. Kiedy to zrobisz, zobaczysz, że klasa singleton ma tę metodę.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
Zauważ również, że jeśli chodzi o klasę pojedynczą, metody singleton są w rzeczywistości metodami instancji.
user.singleton_methods == user_singleton_class.instance_methods(false)