【发布时间】:2015-01-09 07:24:34
【问题描述】:
在 SLS 3.4 中写道:“类型投影 S#T 的定义是 S 中类型 T 的成员绑定 dT”。
我已经阅读了 SLS 3.4 10 遍,但我仍然不明白 S#T 是什么以及什么样的值具有这种类型。
S#T 是什么意思?
什么是成员绑定?
什么是基本类型?
更具体地说:为什么如果
class A
{
class B
}
那么A#B 指的是内部类B 的任何实例?
如何从 SLS 第 3.4 节推导出此语句?
我认为这就是答案所在,但 SLS 很难理解。
这个问题是这个问题的衍生问题:Overriding members having Path Dependent types in Scala. Explanation is needed in terms of Scala Language Specification。
了解S#T 的真正含义是能够找到Overriding members having Path Dependent types in Scala. Explanation is needed in terms of Scala Language Specification 答案的先决条件。
询问原因:
对于普通人来说,SLS 很难阅读。带着这个问题,我试图帮助那些想要了解 SLS 的普通人(包括我自己)。
SLS 似乎没有在任何地方详细解释,Scala 书籍和 SLS 之间存在差距。带着这个问题,我试图在这个差距上架起一座狭窄的桥梁。
在奥德斯基的书中是这样写的:
他写的地方:
这两种类型都符合更通用的类型(是其子类型) Outer#Inner,它表示带有任意值的 Inner 类 Outer 类型的外部对象。
最后一个问题:
问题是,SLS 如何证明这种说法是合理的?
这个陈述如何从 SLS 中“派生”出来?
为了能够回答最后一个问题,必须了解 S#T 的真正含义。
【问题讨论】: