Персонализация Scala REPL для внутреннего DSL

О настройке Scala REPL для внутреннего DSL из http://www.michaelpollmeier.com/create-your-custom-scala-repl/

import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter.ILoop

object TestConsole extends App {
  val settings = new Settings
  settings.usejavacp.value = true
  settings.deprecation.value = true

  new SampleILoop().process(settings)
}

class SampleILoop extends ILoop {
  override def prompt = "myDSL $  "

  addThunk {
    intp.beQuietDuring {
      intp.addImports("my.dsl._")
    }
  }
}

заметил это addThunk не поддерживается в 2.11.* .

Таким образом, как загрузить myDSL.jar или же import my.dsl._ в персонализированный REPL?

1 ответ

Решение

Вы можете вставить код инициализации в файл, похожий на "-i":

import scala.tools.nsc.Settings
import scala.tools.nsc.interpreter.ILoop

object TestConsole extends App {
  val settings = new Settings
  settings.usejavacp.value = true
  settings.deprecation.value = true

  new sys.SystemProperties += ("scala.repl.autoruncode" -> "myrepl.init")

  new SampleILoop().process(settings)
}

class SampleILoop extends ILoop {
  override def prompt = "myDSL $  "
}

Или же:

object TestConsole extends App {
  val settings = new Settings
  settings.usejavacp.value = true
  settings.deprecation.value = true

  new sys.SystemProperties += (
    "scala.repl.autoruncode" -> "myrepl.init",
    "scala.shell.prompt" -> "myDSL $ "
  )

  new scala.tools.nsc.interpreter.ILoop process settings
}
Другие вопросы по тегам