1

有人可以举一个简单的例子来说明我如何在运行时从 JVM 中使用 scala.tools.nsc 编译 Scala 类吗?我正在尝试一些动态行为,我希望能够在运行时编译 Scala 类,然后加载和使用它们。我最感兴趣的是用原始类型的纯函数(双精度数、浮点数等)编译对象。谢谢!

4

1 回答 1

0

关于scala.tools.reflect.Toolbox让我走上正轨的评论,我最终能够回答我自己的问题。我一直在寻找这样的东西:

import scala.reflect.runtime._
import scala.reflect.runtime.universe._
import scala.tools.reflect.ToolBox

object Main extends App {

  val cm = universe.runtimeMirror(getClass.getClassLoader)
  val toolBox = cm.mkToolBox()

  val f = toolBox.eval(toolBox.parse("""(x:Double) => x*x"""))
  f match {
    case f1:scala.Function1[Double, Any] => 
        println(f1(4.4))
    case _ => 
        throw new Exception("Expected a Function1[Double,Any] but got something else")
  }

}
于 2018-10-13T14:31:51.617 回答