Есть отвратительный (но работающий) взлом, использующий ObjectSpace.Например, то, что вы никогда не должны использовать, за исключением игры и, возможно, отладки.Вам просто нужен его первый (и единственный) экземпляр, поэтому:
ObjectSpace.each_object(self).first
Чтобы определить, является ли это одноэлементным классом, вы можете использовать странное свойство, которое ancestors
не будет включать его получатель, если это одноэлементный класс(или собственный класс, или магический класс):
ObjectSpace.each_object(self).first unless ancestors.include? self
Если вам небезразличны граничные случаи, есть три объекта, классы которых также являются их одноэлементными классами.
[true, false, nil].each do |o|
o.class.send(:define_method, :attached) { o }
end