gpt4 book ai didi

scala - 奇怪的行为

转载 作者:行者123 更新时间:2023-12-01 06:58:23 24 4
gpt4 key购买 nike

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=is X)

编辑:我知道如何解决这个问题。我不明白为什么编译器在这种情况下不发出警告或错误。

最佳答案

您假设顺序在 Scala 中无关紧要。确实如此。因为 isX 是一个变量值,虽然它是在 ifX 运行时定义的,但它的值仍未初始化,因此它是其类型的默认值( bool 值,所以为假)。

如果您将 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;
}
}

关于scala - 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9200990/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com