Scala动态类管理

时间:2012-06-29 15:05:00

标签: performance scala dynamic compilation classloader

我想知道Scala中是否可以使用以下内容(但我认为这个问题也适用于Java):

  • 动态创建一个Scala文件(好吧,这里没问题)
  • 编译(我不认为这会是一个真正的问题)
  • 动态加载/卸载新类

除了知道动态代码加载/重新加载是否可行之外(在Java中这是可能的,所以我认为它在Scala中也是可行的)我还想知道这在性能下降方面的含义(我可以有很多类,没有名字冲突,但真的很多!)。

TIA!

P.S。:我知道有关Scala中类加载的其他问题,但是我还没有找到关于性能的答案!

2 个答案:

答案 0 :(得分:2)

是的,你想做的一切当然是可能的。您可能希望查看ScalaMock,这是动态创建Scala源代码的示例。在SBT,这是从代码调用编译器的一个例子。然后有许多不同的系统可以动态加载类 - 以loadLibrary的文档为出发点。

但是,根据您想要实现的目标,您可能希望查看Scala Macros。它们提供了与生成源代码然后编译它所获得的相同的灵活性,但没有该方法的许多缺点。 ScalaMock的原始版本过去通过生成源代码来工作,但是I'm in the process of moving to using macros instead

答案 1 :(得分:2)

在Scala中可以实现,REPL清楚地证明了这一点。使用Scala 2.10甚至可以相对简单。