Как написать Scala 2.9 код, который позволит отказаться от интерпретатора

Я не уверен, как написать код, который позволит отказаться от интерпретатора в коде Scala 2.9. Этот вопрос является продолжением этого, в котором спрашивается, что эквивалентно Scala,

import pdb
pdb.set_trace()

был из Python. Рекомендации, приведенные здесь, были в основном для Scala 2.8, а соответствующие пакеты больше не существуют в их предыдущей форме. А именно,

  • scala.nsc.tools.nsc.Interpreter.{break, breakIf} были перенесены на scala.nsc.tools.nsc.interpreter.ILoop.{break, breakIf}
  • DebugParam теперь NamedParam в scala.tools.nsc.interpreter

Как отмечено в исходном сообщении, путь класса родительского процесса автоматически не передается новому интерпретатору, поэтому было представлено обходное решение здесь. К сожалению, многие из вызванных там классов/методов изменились, и я не совсем уверен, как изменить код, который ведет себя как "ожидаемый".

Спасибо!

EDIT: Вот мой тестовый код, который при текущих компиляциях и запусках, но попытка выполнить что-либо в отладчике приводит к замораживанию приложения, если скомпилировано с помощью scalac и выполнено 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: Поскольку моя текущая настройка работает через sbt, я обнаружил, что этот раздел посвящен в ЧаВо (внизу страницы)). Однако я не понимаю объяснения, и любое разъяснение на MyType было бы неоценимым.

EDIT3: еще одно обсуждение темы без решения: http://permalink.gmane.org/gmane.comp.lang.scala.simple-build-tool/1622

Ответы

Ответ 1

Итак, я знаю, что это старый вопрос, но если ваш REPL висит, мне интересно, проблема в том, что вам нужно поставить -Yrepl-sync вариант? Когда мой встроенный REPL висел в подобной ситуации, это решило его для меня.

Чтобы установить -Yrepl-sync во встроенный REPL, вместо breakIf вам нужно напрямую работать с ILoop, чтобы вы могли получить доступ к 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()