类型选择,类型投影。什么是Scala的S#T?需要基于Scala语言规范的解释

时间:2015-01-09 07:24:35

标签: scala types

在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之间存在差距。有了这个问题,我试着在这个差距上架起一座狭窄的桥梁。

在奥德斯基的书中写道:

enter image description here

他写的地方:

  

这两种类型都符合更普遍的类型(是其子类型)   外#Inner,代表具有任意性的内部类   外部类型的外部对象。

最后一个问题:

问题是,SLS如何证明这种说法是正确的?

如何从SLS“衍生”此声明?

为了能够回答这最后一个问题,我们必须了解S#T究竟是什么。

1 个答案:

答案 0 :(得分:1)

我对A#B(只是一个实际问题)没有法律上的理解,所以我无法帮助解决第一部分,但我可以回答你的最后一个问题:按照3.2.3,类型{ {1}}是o1.Inner。根据3.5.2,“如果o1.type#Inner符合T#t”,则“类型投影U#t符合T”。希望很明显U;严格来说这是因为(再次在3.5.2中)“单例类型o1.type <: Outer符合路径类型p.type”。