我来自Python背景,在我的代码中的任何时候都可以添加

import pdb; pdb.set_trace()

在运行时,我将在那个位置进入交互式解释器。 scala是否具有等效功能,或者在运行时无法实现?

最佳答案

是的,您可以在Scala 2.8上使用。请注意,要使其正常工作,您必须在类路径中包含scala-compiler.jar。如果您使用scala调用scala程序,它将自动完成(或者在我进行的测试中如此)。

然后可以像这样使用它:

import scala.tools.nsc.Interpreter._

object TestDebugger {
  def main(args: Array[String]) {
    0 to 10 foreach { i =>
      breakIf(i == 5, DebugParam("i", i))
      println(i)
    }
  }
}

您可以传递多个DebugParam参数。当REPL出现时,右侧的值将绑定(bind)到您在左侧提供名称的val。例如,如果我这样更改该行:
      breakIf(i == 5, DebugParam("j", i))

然后执行将如下所示:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int

scala> j
res0: Int = 5

通过键入:quit继续执行。

您也可以通过调用break来无条件地进入REPL,它接收的是ListDebugParam而不是vararg。这是完整的示例,代码和执行:
import scala.tools.nsc.Interpreter._

object TestDebugger {
  def main(args: Array[String]) {
    0 to 10 foreach { i =>
      breakIf(i == 5, DebugParam("j", i))
      println(i)
      if (i == 7) break(Nil)
    }
  }
}

然后:
C:\Users\Daniel\Documents\Scala\Programas>scalac TestDebugger.scala

C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int

scala> j
res0: Int = 5

scala> :quit
5
6
7

scala> j
<console>:5: error: not found: value j
       j
       ^

scala> :quit
8
9
10

C:\Users\Daniel\Documents\Scala\Programas>

10-06 12:21
查看更多