Поведінка екземпляра класу визначається його методом, але трапляються випадки, коли ми знаємо, що певний екземпляр повинен мати особливу поведінку. У більшості мов ми маємо вирішити цю проблему визначенням іншого класу, який буде інстанційований один раз. У Ruby ми можемо дати будь-якому об'єкту свої власні методи з конкретною поведінкою для одного конкретного екземпляра класу.
ruby> class SingletonTest | def size | print "25\n" | end | end nil ruby> test1 = SingletonTest.new #<SingletonTest:0xbc468> ruby> test2 = SingletonTest.new #<SingletonTest:0xbae20> ruby> def test2.size | print "10\n" | end nil ruby> test1.size 25 nil ruby> test2.size 10 nil
У цьому прикладі, test1 і test2 належать одному класу, але test2 має перевизначений метод size та її поведінка добре. Даний метод, який має особливу поведінку для єдиного об'єкта, називається Singleton методом.
Singleton методи часто використовуються для елементів у графічних інтерфейсах (GUI), де необхідно робити різні дії, коли натискаються різні кнопки.
Singleton методи не є унікальними для Ruby, так як вони з'явилися в CLOS, Dylan і т.д. Також деякі мови, наприклад, Self та NewtonScript мають лише singleton методи. Їх іноді називають мовами прототипування.