Je viens d'un Python arrière-plan, où à tout moment de mon code, je peux ajouter
import pdb; pdb.set_trace()
et au moment de l'exécution, je serai déposé dans un interprète interactif à cet endroit. Existe-t-il un équivalent pour Scala ou n'est-ce pas possible au moment de l'exécution?
Oui, vous pouvez, sur Scala 2,8. Notez que, pour que cela fonctionne, vous devez inclure le Scala-compiler.jar dans votre classe de classe. Si vous appelez votre scala Programme avec scala
, il sera fait automatiquement (ou il semble donc dans les tests que j'ai faits).
Vous pouvez ensuite l'utiliser comme ceci:
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)
}
}
}
Vous pouvez passer plusieurs DebugParam
arguments. Lorsque le REPL apparaît, la valeur à droite sera liée à un Val dont vous avez fourni le nom à gauche. Par exemple, si je change cette ligne comme ceci:
breakIf(i == 5, DebugParam("j", i))
Ensuite, l'exécution se produira comme suit:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
Vous continuez l'exécution en tapant :quit
.
Vous pouvez également déposer sans condition dans REPL en invoquant break
, qui reçoit un List
de DebugParam
au lieu d'un exemple de vararg. Voici un exemple complet. Voici un exemple complet. Voici un exemple complet. Voici un exemple complet , code et exécution:
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)
}
}
}
Puis:
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>
Idée Intellij :
Evaluate Expression
(Alt+F8, dans le menu: exécuter -> Evaluez l'expression) Fenêtre pour exécuter arbitraire Scala code.Eclipse :
À partir de Scala 2.10 break
et breakIf
ont été supprimés de ILoop
.
Pour briser l'interprète, vous devrez travailler avec ILoop
directement.
D'abord ajouter scala compiler
une bibliothèque. Pour Eclipse Scala, clic droit sur Project => Build Path
=> Add Libraries...
=> Scala Compiler
.
Et vous pouvez ensuite utiliser ce qui suit où vous souhaitez démarrer l'interprète:
import scala.tools.nsc.interpreter.ILoop
import scala.tools.nsc.interpreter.SimpleReader
import scala.tools.nsc.Settings
val repl = new ILoop
repl.settings = new Settings
repl.settings.Yreplsync.value = true
repl.in = SimpleReader()
repl.createInterpreter()
// bind any local variables that you want to have access to
repl.intp.bind("row", "Int", row)
repl.intp.bind("col", "Int", col)
// start the interpreter and then close it after you :quit
repl.loop()
repl.closeInterpreter()
Dans Eclipse Scala L'interprète peut être utilisé à partir de la vue Console
:
Pour ajouter à la réponse de Daniel, à partir de Scala 2.9, les méthodes break
et breakIf
sont contenues dans scala.tools.nsc.interpreter.ILoop
. En outre, DebugParam
est maintenant NamedParam
.