7
我正在读深入Scala。这是本书的摘录:路径依赖类型是否是类型投影?
所有路径相关类型都是类型投影。通过编译器将路径依赖类型
foo.Bar
重写为 为foo.type#Bar
...在Scala中,所有类型引用都可以写成针对命名实体的项目。类型scala.String是
scala.type#String
的简写,其中名称scala
指的是包scala
,类型String
由scala包中的String
类定义。
显然,没有scala.String
类,但我失败Null
重现此。
scala> type N = scala.type#Null
<console>:7: error: type mismatch;
found : type
required: AnyRef
type N = scala.type#Null
所以,我的问题如下。路径依赖类型是否是类型投影?它只是内部编译器表示还是可以用scala代码表示?
但根据SLS§3.1'路径是以下... p.x其中p是一个路径,并且x是p的稳定构件中的一个。稳定构件是 包或...一个稳定identi音响ER处于identi音响er.''scala.Null'是稳定的标识符结束的路径。对? – 4e6
不,所有稳定的标识符都是值或包:'scala.Null'指定的类型不是值。 'scala'是一个稳定的标识符,但是,当你观察到的,是一个包,而不是一个对象,其行为WRT的单型运营商形成'.type'是foo'我在我的答案给的例子'不同。 –
哦,现在,我终于明白了'.type'行为。花了很多时间来理解它。非常感谢你:) – 4e6