我将 JRebel 与 Scala 一起使用,并且经常遇到需要重新启动服务器的情况,因为如果超类发生更改,JRebel 无法加载类。这主要是在我更改匿名函数时完成的,因为我可以从 JRebel 错误描述中推断出:
Class 'mypackage.NewBook$$anonfun$2' superclass was changed from 'scala.runtime.AbstractFunction1' to 'scala.runtime.AbstractFunction2' and could not be reloaded
。变化的数字是指函数参数的数量。
AbstractFunction1
是单参数函数,而 AbstractFunction2
是双参数函数。 解决这个问题的一种方法是柯里化或元组你的函数,以便它们始终是单参数函数。
并且,是的,匿名函数会按照您的建议自动命名。 如果您在现有的匿名单参数函数之前插入一个新的匿名双参数函数,它将显示好像原始函数的类型已更改。