我正在尝试使用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。
答案 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
,但这对我担心的自定义库没有帮助。