斯卡拉杰瑞贝尔超级班

时间:2010-12-28 23:48:35

标签: scala compiler-construction

我正在使用带Scala的JRebel,并且我经常遇到重启服务器的需要,因为如果超类被更改,JRebel无法加载类。这主要是在我更改匿名函数时完成的,因为我可以从JRebel错误描述中推断出:
Class 'mypackage.NewBook$$anonfun$2' superclass was changed from 'scala.runtime.AbstractFunction1' to 'scala.runtime.AbstractFunction2' and could not be reloaded
有什么办法,我怎么设计我的代码来避免这种情况? scala编译器是否接受这些函数,在源代码中出现它们的编号?

1 个答案:

答案 0 :(得分:2)

正在更改的数字是指函数参数的数量。 AbstractFunction1是单参数函数,而AbstractFunction2是双参数函数。解决这个问题的一种方法是对函数进行curry或tuple,使它们始终是单参数函数。

而且,是的,匿名函数会按照您的建议自动命名。如果在现有的匿名one-arg函数之前插入一个新的匿名双参数函数,它将看起来好像原始函数的类型发生了变化。