case class Test(kind: Int) {
val ifX = if (isX) "is X" else "not X"
val isX = kind == 1
}
val test = Test(1)
println("ifX=%s, isX=%b".format(test.ifX, test.isX))
为什么打印此代码:
ifX =不是X,isX = true
当将“val ifX”移到“ifX”之前就可以了(打印ifX = is X)
编辑:我知道如何解决。我不明白为什么在这种情况下编译器不会发出警告或错误。
最佳答案
您正在假设顺序在scala中无关紧要。是的因为isX是一个变量值,并且在ifX运行时已定义,但是它的值仍未初始化,因此它是其类型的默认值(布尔值,所以为false)。
如果将isX重新定义为函数(def isX = ...
),它将起作用。
这大致等效于以下Java:
class Test {
String ifX;
bool isX; // Defaults to false, its a primitive after all
public Test(Int kind) {
ifX = isX ? "is X" : "not X";
isX = kind == 1;
}
}