【问题标题】:Type selection, type projection. What is S#T in Scala ? Scala Language Specification based explanation is needed类型选择,类型投影。 Scala 中的 S#T 是什么?需要基于 Scala 语言规范的解释
【发布时间】: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 的真正含义。

【问题讨论】:

    标签: scala types


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-27
      • 2015-05-03
      • 1970-01-01
      • 2014-04-26
      相关资源
      最近更新 更多