是否已经创建了对象的singleton类?

时间:2011-01-04 10:23:18

标签: ruby object-model

我想知道有没有办法检查是单例类的 对象已经创建?

ex:obj.singleton_class_defined?

1 个答案:

答案 0 :(得分:3)

始终定义对象的单例类。在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

从那里引用:

  

元类是实用的   目的是一个实际的类。它是一个   类的对象。唯一的事情   关于元级的“特殊”就是这样   它是根据需要创建并插入的   在继承链之前   对象“真实”类。所以在里面   MRI解释器对象 - &gt; klass可以   引用一个元类,它有一个   指向“超级”的指针   链中的下一个类。当你   在MRI中调用object.class   翻译实际上“跳过”了   元类(和模块),如果是的话   那里。