繁体   English   中英

Scala调试

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM