【问题标题】:Compile Scala Object using NSC使用 NSC 编译 Scala 对象
【发布时间】:2018-10-12 18:17:19
【问题描述】:

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

【问题讨论】:

  • 听起来你在找scala.tools.reflect.ToolBox

标签: scala jvm scala-compiler


【解决方案1】:

关于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")
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2015-03-12
    • 2016-05-18
    • 2010-12-06
    • 1970-01-01
    • 2019-07-29
    相关资源
    最近更新 更多