Я создаю класс 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))
}
Это компилируется красиво и работает так, как ожидалось.
Однако, если я удаляю измененный private[this]
, я получаю следующую ошибку:
contravariant type T1 occurs in invariant position in type => scala.collection.mutable.Map[T1,R] of value cache
Почему это, когда я удаляю модификатор, вдруг контравариантный тип T1 вмешивается в инвариантный тип Карты? Как модификаторы влияют на параметризацию типа?