考虑 Scala 类的定义p.X
,T
并且Y
:
package p {
object X {
val y: Int = 21
}
}
class T { val X = new Y(42) }
class Y(val y: Int)
val p = new T
在这些定义之后,问题出现了标识符p.X.y
指的是什么:
y=21
到class中的值p.X
,或- 到值
X.y=42
引用的值p
?
测试显示,采用了变体 2。
问题:这在 SLS 中是在哪里定义的?
编辑
为了澄清这种情况,我已将上述示例更改/扩展为以下编译单元:
package p {
object X { val y: Int = 21 }
}
class T { val X = new Y(42) }
class Y(val y: Int)
object p extends T
object Test extends App { println(p.X.y) }
我不清楚 SLS 第 2 节的定义如何在这里应用。应用程序的范围Test
没有定义绑定,并且在编译单元的范围内,两个绑定object p
和package p
(或对象p.x
)似乎具有相同的优先级。