彼は次のようにコンパイルします:
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 の内部クラスです。
更新: Travis Brown の回答は、最初のエラーの正しい説明を提供しているようです。MutableList のすべての使用法を List に変更しました。驚いたことに、これにより最初のエラーだけでなく、2 番目のエラーも停止しました。最も外側の GeomBase クラスの外部で型を使用しようとしたときにもエラーが発生しました。コンパイラがクラッシュしました。型をインスタンス化するとき。MutableLists から Lists に再度変更すると、予期せずこれらのエラーの 1 つが削除されましたが、コンパイラはクラッシュしませんでした。私は 2.10.0-M3 用の Scala Eclipse プラグイン 2.1 スペシャル エディションを使用していました。これにより、Scala コンパイラーとパス依存型にまだ問題がある可能性があるという結論に至りました。