假设object
是类C
的实例。还假设object
附加了一个特定于实例的方法m
。方法m
在C
及其超类C0
中定义。问题是,表达式
super m
在self == object时调用,为什么?
我看到两个可能的答案:
修改
即使我们实现特定于实例的行为的方式对super
的语义不重要,但我要指出我最喜欢的实现是放置所谓的MethodDictionaryArray
的实现。 (或简称MDA
)在对象标题中,而不是对象类。可以想象,MDA
包含继承链的方法字典。
通过此实现,您可以将实例行为放在新的MethodDictionary
(MD
)中,并将对象的MDA重新定义为嵌套数组#{MD. MDA}
。
答案 0 :(得分:4)
恕我直言,它应该调用C0>>m
表现得像正常' C
的实例。实现特定于实例的行为的实现细节不应该是重要的。如果将方法从C
复制到其实例,理想情况下它应该与以前完全相同。
答案 1 :(得分:1)
super的标准定义是super将消息发送到与self相同的接收者,但是在定义当前方法的类之上的类中启动方法查找。
答案 2 :(得分:0)
在我看来,人们可以用不同的方式表达定义,
得到正确的语义解析。
如果我们认为正常情况等同于
'do not include in the search any methods that are defined by the receiver, include only those which are inherited'
然后我们不需要实施细节 决定期待哪个答案。