请给出一个代码示例,说明如何以编程方式创建在Scala2.10中工作的嵌入式Scala REPL解释器。(我在花了几个小时梳理各种代码碎片以获得一个正常工作的解释器后,添加了这个问答)
发布于 2014-02-26 18:51:45
基于Ben的出色回答,下面是一个帮助器类,用于简化解释器的启动。用法:
Repl.run(("e", "Double", 2.71828), ("pi", "Double", 3.1415))当你从SBT运行时,它会自动检测并适应。
Repl.scala:
import scala.tools.nsc.interpreter.ILoop
import scala.tools.nsc.Settings
import java.io.CharArrayWriter
import java.io.PrintWriter
object Repl {
def run(params: (String, String, Any)*) {
def repl = new ILoop {
override def loop(): Unit = {
params.foreach(p => intp.bind(p._1, p._2, p._3))
super.loop()
}
}
val settings = new Settings
settings.Yreplsync.value = true
// Different settings needed when running from SBT or normally
if (isRunFromSBT) {
settings.embeddedDefaults[Repl.type]
} else {
settings.usejavacp.value = true
}
repl.process(settings)
}
def isRunFromSBT = {
val c = new CharArrayWriter()
new Exception().printStackTrace(new PrintWriter(c))
c.toString().contains("at sbt.")
}
}https://stackoverflow.com/questions/18628516
复制相似问题