Я происхожу из среды Python, где в любой точке в моем коде я могу добавить
import pdb; pdb.set_trace()
и во времени выполнения я буду брошен в интерактивный интерпретатор в том пятне. Существует ли эквивалент для scala, или разве это не возможно во времени выполнения?
Да, вы можете, на Scala 2.8. Обратите внимание, что для этого работать, вы должны включить Scala-Compiler.jar в вашем классе. Если вы вызываете вашу Scala Program с 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
. Когда появится REP, значение справа будет связано с вал, имя которого вы предусмотрены слева. Например, если я изменим эту строку, как это:
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
Вы продолжаете выполнение, введя : выйти
.
Вы также можете безоговорочно падать в замену, вызывая разрыв
, который получает список
DebugParam
вместо варярга. Вот полный пример, код и выполнение:
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>