他以下编译:
import scala.collection.mutable.MutableList
abstract class GeomBase[T <: DTypes]
{
val grids = new MutableList[GridBase]
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids.flatMap(_.hexs.toList)
//the above compiles fine
abstract class GridBase
{
val hexs: MutableList[HexG with T#HexTr] = new MutableList[HexG with T#HexTr]
class HexG(coodI: Cood) extends Hex
{
}
}
}
但是当我改变这条线时
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids.flatMap (_.hexs.toList)
为此(将 MutableList 更改为列表)
def hexs: List[GridBase#HexG with T#HexTr] = grids.flatMap (_.hexs.toList)
它不再编译。这也不编译
def hexs: MutableList[GridBase#HexG with T#HexTr] = grids(0).hexs
它不会编译,说我在前一种情况下需要一个 MutableList 并在后一种情况下类型不兼容。我不明白为什么。只是为了澄清以防引起混淆 HexG 是 GridBase 的内部类,它本身就是 GeomBase 的内部类。
更新:特拉维斯布朗的回答似乎为第一个错误提供了正确的解释。我已将 MutableList 的所有用途更改为 List。令人惊讶的是,这不仅阻止了第一个错误,还阻止了第二个错误。尝试使用最外层 GeomBase 类之外的类型时,我也遇到了错误。我遇到了编译器崩溃。实例化类型时。再次从 MutableLists 更改为 Lists 会意外删除其中一个错误,但不会导致编译器崩溃。我一直在为 2.10.0-M3 使用 Scala Eclipse 插件 2.1 特别版。这使我得出结论,Scala 编译器和路径相关类型可能仍然存在问题。