在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之间存在差距。有了这个问题,我试着在这个差距上架起一座狭窄的桥梁。
在奥德斯基的书中写道:
他写的地方:
这两种类型都符合更普遍的类型(是其子类型) 外#Inner,代表具有任意性的内部类 外部类型的外部对象。
最后一个问题:
问题是,SLS如何证明这种说法是正确的?
如何从SLS“衍生”此声明?
为了能够回答这最后一个问题,我们必须了解S#T究竟是什么。
答案 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
”。