我想知道有没有办法检查是单例类的 对象已经创建?
ex:obj.singleton_class_defined?
答案 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 翻译实际上“跳过”了 元类(和模块),如果是的话 那里。