Клас синглтон, найпростішим чином, це спеціальний клас, який рубіни створюють для розміщення методів, визначених для окремих об'єктів. У рубіні можна визначити методи окремих об’єктів, які є унікальними лише для цього об’єкта. Наприклад, розглянемо наступне нижче
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Як ви можете бачити вище, об'єкт user1 не реагує на метод 'age', оскільки це одномісний метод, метод, однозначно визначений на об'єкті користувача. Для цього рубін створює спеціальний клас, який називається одиночним класом, або власним класом, для розміщення цього унікального методу. Ви можете перевірити це, виконавши наступне:
user.singleton_class
Ви також можете запитати ruby, чи тут знайдений метод 'age', використовуючи об'єкт методу, щоб з'ясувати, де визначено метод 'age'. Коли ви зробите це, ви побачите, що клас singleton має такий метод.
user_singleton_class = user.method(:age).owner
user.method(:age).owner == user.singleton_class
user_singleton_class.instance_methods(false)
Також зауважте, що, наскільки йде клас singleton, односторонні методи насправді є його методами екземпляра.
user.singleton_methods == user_singleton_class.instance_methods(false)