我经常./sbt fastOptJS
向我发出链接错误Referring to non-existent method...
,如果我再次运行./sbt clean
然后./sbt fastOptJS
,则会消失。
我在想,这可能是什么原因?这可能是build.sbt
配置错误的问题吗?常见的编码风格陷阱?
答案 0 :(得分:1)
根据我的经验,这通常是由增量编译器在某些更改时没有重新编译足够的源代码引起的。我看到的一个特殊问题是方法签名更改,其中只有推断的返回类型更改为导致此更改,如更改时:
def x(a: Int, b: Double) = a
到
def x(a: Int, b: Double) = b
如果是这种情况,使用显式返回类型通常会有所帮助:
def x(a: Int, b: Double): Double = a
(实际上,需要更复杂的代码才能触发问题。)
对我来说,这在Scala JS和Scala JVM中都会发生。在Scala JVM中,它通常不会在链接期间显示,而是在执行期间显示,但抛出异常NoSuchMethodError
。
答案 1 :(得分:0)
虽然我已经接受了另一个答案,但我正在添加这个答案,希望对其他来搜索的人有用。
https://github.com/sbt/zinc/issues/249
Zinc对Macros的支持并不完美,有时宏的定义会发生变化,但有些文件使用宏没有,因此编译后的代码也不会改变,导致最后一步缺少函数。