可能重复:
Forward References - why does this code compile?
Scala and forward references
object Main extends App {
val a = 4
val b = a + c
val c = 5
println(b) // => 4
}
当c
被分配时,这将打印 4 ,因为0
显然是b
。 a
和c
是值,因此它们不应该在一个时刻0
,而在下一个时间5
。在Scala中,它们应该是不可变的,对吗?
我不应该至少得到某种警告吗?当然,在上面的例子中,你必须是一个想念那个的白痴,但在更复杂的情况下,很难说出它的顺序。
我当然知道我可以使用lazy val b = ...
,但如果我认为我把它按正确的顺序排列,当我真的没有时。不是很危险,因为根本没有得到任何警告吗?运行得很好!?如何通过两者 Scala IDE 和编译器?这是故意的吗?或者这是一个无法修复的错误? :/
:)