Scala Metaprogramming在运行时

时间:2014-10-09 19:18:07

标签: scala metaprogramming

我正在构建一个将接收不可预测的数据结构的工具,我想生成案例类来完成接收数据的结构。 我试图弄清楚是否可以在运行时生成案例类?只有在运行时才能知道这种结构。 它类似于宏,但在运行时。 我在互联网上找到了这个项目 mars 这与我想要做的非常接近,但我无法找到它是否成功。

另一种方法是生成代码,编译并将结果放在类路径中,就像IScala正在以迭代方式使用代码一样。但我不认为这会扩大规模。

是否有人已经完成了运行时代码生成等工作?

此问题也发布在scala-user邮件列表

2 个答案:

答案 0 :(得分:2)

更新:(根据评论)

如果你想要的只是在运行时生成的丢弃代码被送入一个不能仅使用列表和映射的库,而不是以后存储和使用的代码,那么寻找解决方案是有意义的。 Java或JVM的这个问题。也就是说,除非库需要一些不适用于vanilla JVM字节码的Scala特定功能(Scala在字节码中添加了一些额外功能,Java代码不需要/具有这些功能)。


动态生成静态类型代码有什么好处?而不是使用动态数据结构。

我根本不会尝试。只需使用嵌套列表和地图等结构。

答案 1 :(得分:1)

运行时代码生成是the Mars Project的目的之一。火星正在开发中,目前还没有发布版本。 Mars需要自己的工具链来在运行时扩展宏,并且应该使用scala.meta(http://scalameta.org/)特有的几个特性,例如AST解释和AST持久性。目前,我们正在研究scala-reflect中的ASTs类型检查,这是运行时宏扩展所必需的。