非常に一般的なプレフィックス ツリーを作成することで、新しい Scala コレクション フレームワークを学びたかったのです。キーと値がパラメーターである必要があるだけでなく、各ノードで使用されるマップのタイプもパラメーターである必要があります。だから私はこれを試しました:
import collection.immutable.MapLike
class PrefixMap[+M[K1,+V1] <: Map[K1,V1] with MapLike[K1,V1,M[K1,V1]],K,+V](val content: Option[V], val children: M[K,PrefixMap[M,K,V]])
extends Map[Iterable[K],V]
with MapLike[Iterable[K],V,PrefixMap[M,K,V]] {
override def empty: PrefixMap[M,K,V] = new PrefixMap[M,K,V](None, children.empty)
}
しかし、これはコンパイルされません:
PrefixMap.scala:19: error: type mismatch;
found : scala.collection.immutable.Map[K,PrefixMap[M,K,V]]
required: M[K,PrefixMap[M,K,V]]
override def empty: PrefixMap[M,K,V] = new PrefixMap[M,K,V](None, children.empty)
^
one error found
これは私を混乱させます。ドキュメントから、MapLike には「This」を返す空の値があることがわかります。したがって、children は M[K,PrefixMap[M,K,V]] 型であるため、children.empty もその型である必要があります。
何がうまくいかないのですか、それを修正できますか?