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 = not X,isX = true
何时在“ifX”之前移动“val ifX”就可以了(打印ifX =是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;
}
}