我在Eclipse中使用Scala 2.9.0.1。
我有一个Scala类/特征层次结构,类似于:
A.scala: trait A
B.scala: trait B extends A
C.scala: trait C extends B
除了更复杂;太大了,无法发布。
因此,C间接依赖于A,但A对C没有任何了解。
现在,如果我改变A,我到处都会收到错误,所以我一路上升。一旦我最终修复了C中的最后一个错误,突然编译器告诉我A无法编译。由于A不以任何方式依赖于C,因此这没有逻辑意义。实际上我会说这是一个编译器错误。这种情况现在发生在我身上好几次了,这非常令人沮丧,因为这意味着我必须再次更改A,并再次修改我的整个类层次结构。
有没有办法让Scala编译器(在Eclipse中)给我可靠的结果?我是唯一一个得到这种行为的人吗?
答案 0 :(得分:2)
我还观察到Scala程序可能存在错误的“层次结构”,其中某些编译错误在其他修复之前不会被揭示。 这不一定是编译器错误(其他人说这可能是旧的Scala IDE构建器的一个错误,已在trunk中修复。)
一种策略是逐步进行更改:
trait A
并将其称为trait A2
。A2
进行所需的更改,修复出现的任何编译错误。这很容易,因为还没有任何依赖A2
。B2
,C2
等一切正常后,将原始特征替换为修改过的特征。修订控制(我使用git)在这个过程中非常有用。
我发现另一个有用的一般策略是将设计分为两个阶段:
首先,我只对类型进行编码,将所有方法体留空。在任何真正的代码出现之前修复类型错误要容易得多。
一旦类型一致,我可以独立填写方法定义,而不必担心复杂的编译错误。