我正在尝试使用扩展语义实现一种SortedMap。我试图将SortedMap委托为存储但不能解决方差约束:
class IntervalMap[A, +B](implicit val ordering: Ordering[A])
//extends ...
{
var underlying = SortedMap.empty[A, List[B]]
}
这是我得到的错误。我理解为什么我得到错误(我理解方差)。我没有得到的是如何实现这种类型的委托。是的,B上的协方差是必需的。
error: covariant type B occurs in contravariant position in type scala.collection.immutable.SortedMap[A,List[B]] of parameter of setter underlying_=
答案 0 :(得分:5)
您不能将基础设为var
,但可以将其设为val
。
scala> import collection._
import collection._
scala> class IntervalMap[A, +B](implicit val ordering: Ordering[A]) {
| val underlying = SortedMap.empty[A, List[B]]
| }
defined class IntervalMap
在您的示例中,var
定义了一对方法:
class IntervalMap[A, +B](implicit val ordering: Ordering[A]) {
def underlying_=(s: SortedMap[A, List[B]]) = // ...
def underlying: SortedMap[A, List[B]]) = // ...
}
对于要在输入和输出中显示的类型参数B
,它必须是不变的。