gpt4 book ai didi

scala - Scala调试

转载 作者:行者123 更新时间:2023-12-01 23:55:50 25 4
gpt4 key购买 nike

我是Scala的新手,并且已经使用IntelliJ设置了环境。我发现一个我无法解释的问题,下面是代码:

object HelloWorld extends App{
print("before")
var aMap = Map("A"->1, "B"->2)
println("after")
println(aMap)
}

我注意到 println(aMap)可以清楚地打印出 Map("A"->1, "B"->2),因此我想调试并确定 Map是否已实现 funcn,它将使用IntelliJ由 println调用。因此,我在以下位置设置了调试点:
println(aMap)

当我“进入”函数时,似乎再次调用了 var aMap = Map("A"->1, "B"->2)!那么,第二次被调用的原因是什么?

最佳答案

所有顶级字段(var/val)也都变成了有助于uniform access principle概念的方法。

var map = Map(1->2)
val list = List(1,2)

变成
var map = Map(1->2)
def map = map
def map_=(nValue: Map[Int.Int]) {map = nValue}

val list = List(1,2)
def list = list
// No setters for vals

因此,当您调用 println(aMap)时,它使用隐藏的访问器方法来获取aMap的值。

这一切都是因为您位于对象的顶层。如果使用以下方法:
object HelloWorld extends App{
def run() {
print("before")
var aMap = Map("A"->1, "B"->2)
println("after")
println(aMap)
}
run()
}

然后, var aMap将是局部变量,而不使用间接查找。

关于scala - Scala调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23912552/

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