Avatar
ひっくり返る例 // Contravariant × Contravariant → Covariant final class List<T> { // 引数に渡すクロージャの引数の位置で T を利用 // Contravariant × Contravariant → Covariant func map<U>(transform: (T) -> U) -> List<U> } let cats: List<Cat> = ... let animals: List<Animal> = cats // ✅ OK: なぜなら↓ // ↓ map に渡されたクロージャが // 引数で受け取った Animal の任意のメンバにアクセスしても、 // 実際に渡されるのは Cat なので問題ない let noses: List<Nose> = animals.map(\.nose)
👀 1