[英]Scala debugging
我是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
是否实现了一个将由println
调用的funcn
,使用IntelliJ。 所以我设置了一个调试点:
println(aMap)
当我“进入”函数时,似乎var aMap = Map("A"->1, "B"->2)
再次被调用! 那么,这是第二次召唤的原因是什么?
所有顶级字段( var/val
)也被转换为有助于统一访问原则概念的方法 。
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
将是一个局部变量,而不是使用间接查找。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.