2

关于为内部 DSL 个性化 Scala REPL,来自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._")
    }
  }
}

注意到addThunk2.11.* 不支持。

因此如何加载myDSL.jarimport my.dsl._进入个性化的 REPL ?

4

1 回答 1

4

您可以将初始化代码粘贴到文件中,类似于“-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
}
于 2015-01-02T17:08:41.200 回答