2012-01-18 1 views
14

Je ne suis pas sûr de savoir comment écrire du code qui permettra de passer dans un interpréteur en code Scala 2.9. Cette question est un suivi de this one, qui a demandé à ce que l'équivalent de Scala,Comment écrire un code Scala 2.9 qui permettra de passer dans un interpréteur

import pdb 
pdb.set_trace() 

était de Python. Le conseil donné ici était principalement pour Scala 2.8, et les paquets liés n'existent plus sous leur forme précédente. A savoir,

  1. scala.nsc.tools.nsc.Interpreter.{break, breakIf} ont été déplacés à scala.nsc.tools.nsc.interpreter.ILoop.{break, breakIf}
  2. DebugParam est maintenant NamedParam dans scala.tools.nsc.interpreter

Comme indiqué dans le message original, le chemin de classe du processus parent est pas transmis automatiquement au nouvel interpréteur, donc une solution de contournement a été présentée here. Malheureusement, beaucoup de classes/méthodes invoquées ici ont maintenant changé, et je ne suis pas tout à fait sûr de savoir comment modifier le code du comportement comme "attendu".

Merci!

EDIT: Voici mon code de test, à compiles et intensité, mais en essayant d'exécuter quoi que ce soit dans les résultats du débogueur dans l'application gel si compilé par scalac et exécuté par scala

import scala.tools.nsc.interpreter.ILoop._ 

object Main extends App { 

    case class C(a: Int, b: Double, c: String) { 
    def throwAFit(): Unit = { 
     println("But I don't wanna!!!") 
    } 
    } 

    // main 
    override def main(args: Array[String]): Unit = { 

    val c = C(1, 2.0, "davis") 

    0.until(10).foreach { 
     i => 
     println("i = " + i) 
     breakIf(i == 5) 
    } 
    } 
} 

EDIT2: Comme Ma configuration actuelle passe par sbt, j'ai découvert que ce sujet est couvert in the FAQ (en bas de la page). Cependant, je ne comprends pas l'explication donnée, et toute clarification sur MyType serait inestimable.

EDIT3: une autre discussion sur le sujet sans solution: http://permalink.gmane.org/gmane.comp.lang.scala.simple-build-tool/1622

+0

Je l'ai rencontré ce soir aussi. Even: object Main extends App {scala.tools.nsc.interpreter.ILoop.breakIf (true)} va se bloquer. – arya

Répondre

4

donc je sais que c'est une vieille question, mais si votre REPL est suspendu, je me demande si le problème est que you need to supply the -Yrepl-sync option? Lorsque mon REPL embarqué était suspendu dans une situation similaire, cela a résolu le problème pour moi.

Pour définir -Yrepl-sync dans un REPL intégré, au lieu d'utiliser breakIf vous devrez work with the ILoop directly afin que vous puissiez accéder à l'objet Settings:

// create the ILoop 
val repl = new ILoop 
repl.settings = new Settings 
repl.in = SimpleReader() 

// set the "-Yrepl-sync" option 
repl.settings.Yreplsync.value = true 

// start the interpreter and then close it after you :quit 
repl.createInterpreter() 
repl.loop() 
repl.closeInterpreter() 
+0

Cette solution a en effet fonctionné pour moi pour le problème qu'avait OP. Vous pouvez même écrire vos propres 'break' et' breakIf' de cette façon. –

Questions connexes