在一个考试例子中,他们询问该陈述是否有效,如果是,则返回:
对象类超类类
我不能自己跟踪那么多信息。请帮助!
答案 0 :(得分:3)
假设Object
是类型系统的根,您只需要仔细遵循规则:
X
都是其元类X class
X class
都是普通类Metaclass
的实例。nil
时,其元类继承自Class
。所以它会是:
| Expression | Type | |-------------------------------------|--------------| | Object | Object | | Object class | Object class | | Object class superclass | Class | | Object class superclass class | Class class | | Object class superclass class class | Metaclass |
在实践中,Object
不是根,其父ProtoObject
是;因此,如果考试作者考虑到这一点,则上述内容将以Metaclass class
结束。
答案 1 :(得分:0)
表达式的一个有趣方面
Object class
的答案不是Class
,而是Metaclass
。
Object class
不是Class
的原因是Metaclass
不是Class
的子类。更重要的是,Object class
不会继承Class
中定义的行为。
当然,有人可能会说,在同一标准Object
不会是Class
,因为它不是Class
的实例,而是其元类(即,Object class
。)但这仅仅是因为一些技术性问题(或实施细节,如果你愿意的话。)事实是Object
(和这个问题的所有其他类)继承了{{1这就是为什么我们说它们是类,它们表现为Class
的实例(有趣的是,根本没有实例。)
实现此属性的方法包括执行以下等式
Class
由于这种关系,ProtoObject class superclass == Class
的类侧继承了ProtoObject
的(实例)行为(即使Class
没有子类。)
现在,为什么表达
Class
有道理吗?如果Object class superclass
的接收者甚至不是一个类,它应该理解消息superclass
吗?
答案是肯定的,不仅类而且元类具有superclass
。在这里,原因再次与继承的行为有关。
每个程序员都希望如果类superclass
继承自A
,那么B
将继承A class
类侧的所有方法。换句话说,
B
或等同地
A class superclass == B class
但是请注意,正如我们在上面看到的那样(A class superclass == A superclass class
。} {/ 1>},这种关系并不适用于A == ProtoObject
。
所以,在ProtoObject class superclass == Class
的情况下,表达式
ProtoObject
变为
Object class superclass class class
或
Object superclass class class class
或
ProtoObject class class class
因为Metaclass class
是ProtoObject class
的一个实例,所以Metaclass
是class
。
要完成答案,请计算
Metaclass
在这种情况下,我们得到
ProtoObject class superclass class class
或
Class class class