【发布时间】:2012-12-23 14:34:36
【问题描述】:
可能重复:
Scala: forward references - why does this code compile?
object Omg {
class A
class B(val a: A)
private val b = new B(a)
private val a = new A
def main(args: Array[String]) {
println(b.a)
}
}
以下代码打印“null”。在爪哇。由于无效的前向引用,类似的构造无法编译。问题是 - 为什么它在 Scala 中编译得很好?这是设计使然,在 SLS 中描述还是只是 2.9.1 中的错误?
【问题讨论】:
-
让我烦恼的问题是它允许 val 更改其值。这让我很难过:-(
-
这有点奇怪 - 可能会导致很多错误,我依赖于 Java 行为,这需要在使用之前初始化值。
-
@jdevelop 甚至 java 也无法捕获所有可能的前向引用。
-
@DanielC.Sobral 但这种情况很明显。
-
我在包对象方面遇到了同样的问题。
标签: scala reference compilation