gpt4 book ai didi

Scala 值初始化

转载 作者:行者123 更新时间:2023-12-04 17:11:56 24 4
gpt4 key购买 nike

为什么在这个例子中,没有抛出错误并且 b 最终保持默认值?

scala> val b = a; val a = 5
b: Int = 0
a: Int = 5

最佳答案

当您在 REPL 中执行此操作时,您实际上是在执行以下操作:

class Foobar { val b = a; val a = 5 }

b和a是按顺序赋值的,所以在你赋值b的时候,有一个字段a,但是还没有赋值给,所以默认值为0。在Java中,可以'不要这样做,因为您不能在定义之前引用字段。我相信您可以在 Scala 中执行此操作以允许延迟初始化。

如果使用以下代码,您可以更清楚地看到这一点:
scala> class Foobar {
println("a=" + a)
val b = a
println("a=" + a)
val a = 5
println("a=" + a)
}
defined class Foobar

scala> new Foobar().b
a=0
a=0
a=5
res6: Int = 0

如果您创建一个方法,您可以分配正确的值:
class Foobar { val b = a; def a = 5 }
defined class Foobar
scala> new Foobar().b
res2: Int = 5

或者你可以让 b 成为一个懒惰的 val:
scala> class Foobar { lazy val b = a; val a = 5 }
defined class Foobar

scala> new Foobar().b
res5: Int = 5

关于Scala 值初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8908164/

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