在运行时将Scala 3代码从字符串解析成Scala 3 AST。

9
我的目标是将Scala 3代码作为字符串获取,并在运行时将其解析为Scala 3的抽象语法树。在此过程中,如果代码存在编译错误,则应将其作为一部分异常返回。
更大的目标是,如果Scala代码有效,则以Expr [T]结束,并通过拼接正确的位来执行它(我已经覆盖了这个部分)。
使用scala-reflect在Scala 2.*中可以实现这一点,详情请参见此处
val source =
  """
    |object HelloWorld {
    |  def main(args: Array[String]): Unit = {
    |    println("Hello, world!")
    |  }
    |}
    |
    |HelloWorld.main(Array())
    |""".stripMargin
val tree = toolbox.parse(source)
val binary = toolbox.compile(tree)
binary()

就我所了解的,Scala 3 不会移植 scala-reflect 工具包。在 Scala 3 中该如何实现相同功能?

以下是一些相关链接:这里这里


1
你尝试了什么?哪里出了问题?实际上,使用Scala3的元编程特性似乎是正确的方向。 - Gaël J
这似乎与DottySquid中的多阶段编程非常相似,尽管它比仅具有字符串更为复杂。在这里采用分阶段方法是否更好? - Will Sargent
@WillSargent 是的,我看到了,但是我没有想到在运行时从字符串转换为引号和括号的方法。我的代码作为字符串可以在运行时通过REST请求传入。 - arinray
https://dev59.com/sMPra4cB1Zd3GeqPiYmM - Dmytro Mitin
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接