在Scala 2.8参考,第5.3.3节第69页(pdf中的77)中,出现以下段落:
假设特征
D
定义了一些方面 类型为x
的实例C
(即D
) 基类C
)。那么实际D
中x
的超类型是复合词 由所有基础组成的类型 成功L(C)
的{{1}}中的课程。
符号D
的含义是什么(在原始文本中,它是象征性的书法大写L(C)
)?
短语“类...... 成功 \ell
”是什么意思?我不熟悉这种符号。
答案 0 :(得分:7)
底线是,L(C)
由排序为链的所有基类(C的整个继承层次结构,包括特征)组成,顶部有Any
,C
} 在底部。 成功 D
表示在链中更高 D
。
更长的解释是,我们想知道,对于每个类,它的“父” - 用于实现目的和一般清晰度(在C ++中,它是非常混乱的,其中允许无限多重继承)。在Java中它很简单 - 你只有一个直接的超类。但是,由于Scala中的mixin-class组合,它是多重继承的形式(来自一个超类+可能是几个特征),任何类的基类形成一个有向无环图。 L(C)是C的基类的线性化 - 从超类开始,添加特征(及其基类),使它们形成一个链,每个类都有自己的基类超越自己。您可以在the overview of Scala的第6部分中详细了解它。这是一个很好的,全面的功能概述。
答案 1 :(得分:2)
L(C)是class linearization。然后“成功”关注结果序列中的位置。线性化在the spec的第5.1.2节中定义。