Персонализация 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
}