Pourquoi le paramètre de type de reduceLeft ne contient une limite inférieure?
-
27-10-2019 - |
Question
La signature de reduceLeft
sur certains Seq[A]
est
def reduceLeft [B >: A] (f: (B, A) => B): B
Le type de A
est connu, mais la limite inférieure >:
nous dit que B
peut être tout supertype A
.
Pourquoi est-il comme ça? Pourquoi ne pas
def reduceLeft (f: (A, A) => A): A
Nous savons déjà que la tête de la séquence est de type A
et donc je ne peux pas penser à la façon dont B
pourrait être autre chose que égale à A
. Pouvez-vous fournir un exemple où B
est une super-type?
La solution
Disons que votre classe B a une méthode combine(other:B): B
. Maintenant, vous appelez reduceLeft((b,a) => b.combine(a))
sur une liste de A
s. Étant donné que le type de retour de combine
est B
le paramètre de type aux besoins de reduceLeft
être B
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow