私はメモ化クラスを作成しています。
各クラスは関数型を記憶し、次の定義を持ちます。
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 が Map の不変型に干渉するのはなぜですか? 修飾子は型のパラメーター化にどのように影響しますか?