Простыми словами, одноэлементный класс - это специальный класс ruby, предназначенный для размещения методов, определенных для отдельных объектов. В ruby можно определять методы для отдельных объектов, которые уникальны только для этого объекта. Например, рассмотрите следующее ниже
class User; end
user = User.new
def user.age
"i'm a unique method"
end
user1 = User.new
user.age
user1.age
Как вы можете видеть выше, объект user1 не отвечает на метод age, потому что это одноэлементный метод, метод, однозначно определенный для объекта пользователя. Для этого Ruby создает специальный класс, называемый singleton class, или eigenclass, для размещения этого уникального метода. В этом можно убедиться, выполнив следующие действия:
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)
Также обратите внимание, что что касается одноэлементного класса, одноэлементные методы на самом деле являются методами экземпляра.
user.singleton_methods == user_singleton_class.instance_methods(false)