3
我想通過製作一個非常通用的前綴樹來學習新的Scala集合框架。不僅必須將鍵和值作爲參數,而且每個節點中使用的映射的類型也必須是參數。所以,我想這一點:鍵入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」。所以,由於孩子的類型是M [K,PrefixMap [M,K,V]],children.empty也應該是這種類型。
怎麼回事,可以修補?