将类文件导入Scala Interpreter IMain

时间:2013-01-15 05:33:57

标签: scala interpreter

我正在尝试使用scala的解释器中的IMain方法来运行已转换为字符串的函数。但是,我无法将用户创建的类导入到解释器中。

例如,您可以轻松地从scala数据库导入类,例如:

val m = new IMain()
m.interpret("import scala.math.sin")
m.interpret("sin(10)")

只要解释器​​正在运行,此导入将保持不变。但是我无法找到导入我创建的类和对象(或任何私有库)的方法:

m.interpret("import sounder.Sounder.play"
m.interpret("play(t=>50*sin(2*Pi*t*400),0,10")

(播放是一种通过计算机的声卡播放声音的方法)

我尝试过使用解释器中的所有方法,但似乎都没有。我提出的唯一解决方案是将类文件转换为单行with;将每一行分开并通过解释运行,但即使这样也存在阻止它编译的问题。

是否有一个允许输入到解释器的方法,或者是另一个允许scala解释器处理字符串的进程。

感谢您的帮助,我在Windows 7计算机上运行Scala 2.9.2。

1 个答案:

答案 0 :(得分:0)

您是否尝试过以下操作:

val m = new IMain() {
   override protected def parentClassLoader = sounder.Sounder.getClassLoader
}

在Scala 2.10中,你可以这样做:

val s = new tools.nsc.Settings()
s.embeddedDefaults[sounder.Sounder]
val m = new IMain(s)

如果您通过sbt run启动程序,可能会遇到麻烦。手册会告诉您需要将fork in run := true添加到build.sbt,但这对我担心的自定义库没有帮助。