相关疑难解决方法(0)

Scala修改器和类型参数化

我正在创建一个memoization类.

每个类都会记忆一个函数类型,并具有以下定义:

 class MemoizedFunction1[-T1, +R](f: T1 => R) {
    private[this] val cache = mutable.Map[T1, R]()
    def apply(t: T1): R = cache.getOrElseUpdate(t,f(t))
  }
Run Code Online (Sandbox Code Playgroud)

这很好地编译并按预期工作.但是,如果我删除修改后的private[this]我得到以下错误:

contravariant type T1 occurs in invariant position in type => scala.collection.mutable.Map[T1,R] of value cache
Run Code Online (Sandbox Code Playgroud)

为什么当我删除修饰符时,逆变类型T1会突然干扰地图的不变类型?修饰符如何影响类型参数化?

scala

12
推荐指数
2
解决办法
622
查看次数

标签 统计

scala ×1