Ruby如何在内部区分类及其实例,例如下面的MyClass
和obj
?如何允许创建MyClass
但不包含obj
的实例?
MyClass = Class.new
obj = MyClass.new
答案 0 :(得分:2)
它没有区别。 MyClass
是Class
的一个实例(与obj
是MyClass
的实例的方式相同),它实现了new
method和{{3} } 才不是。它就是那么简单 - 这里没有什么特别不寻常的事情发生,Class#new
就像其他方法一样。
在这里我们可以看到每个对象类的祖先:
MyClass = Class.new
obj = MyClass.new
MyClass.class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
obj.class.ancestors #=> [MyClass, Object, Kernel, BasicObject]