Одноэлементный класс объекта всегда определяется.В 1.8.7 вы можете использовать singleton_methods
, чтобы увидеть, есть ли у объекта уже связанные одноэлементные методы:
>> foo = ''
=> ""
>> foo.singleton_methods
=> []
1.9.2 (возможно, также более ранние 1.9s, я не помню) также имеет методназывается singleton_class
, что избавляет вас от выполнения вещи class << self; self ; end
, к которой мы все привыкли:
>> foo.singleton_class #=> #<Class:#<String:0x00000100ba5648>>
Редактировать:
Поскольку вы отметили это как "объект-модель ", я также хотел бы рекомендовать следующую ссылку:
http://www.hokstad.com/ruby-object-model.html
Цитировать оттуда:
Мета-класс для всехпрактические цели актуальный класс.Это объект типа Class.Единственное, что «особенного» в метаклассе - это то, что он создается по мере необходимости и вставляется в цепочку наследования перед «реальным» классом объектов.Таким образом, внутри интерпретатора MRI объект-> класс может ссылаться на мета-класс, у которого есть указатель с именем «super», который ссылается на следующий класс в цепочке.Когда вы вызываете object.class в MRI, интерпретатор фактически «пропускает» мета-класс (и модули), если он там есть.