Заскочите в интерпретатор во время произвольного scala участка кода

Я происхожу из среды Python, где в любой точке в моем коде я могу добавить

import pdb; pdb.set_trace()

и во времени выполнения я буду брошен в интерактивный интерпретатор в том пятне. Существует ли эквивалент для scala, или разве это не возможно во времени выполнения?

82
задан Lars Yencken 29 January 2010 в 06:46
поделиться

1 ответ

Да, вы можете, на 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>
77
ответ дан 24 November 2019 в 09:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: