Perché il parametro di tipo di ReduceLeft contiene un limite inferiore?
-
27-10-2019 - |
Domanda
La firma di reduceLeft
su alcuni Seq[A]
è
def reduceLeft [B >: A] (f: (B, A) => B): B
Il tipo di A
è noto, ma il limite inferiore >:
Ci dice questo B
può essere qualsiasi supertipo di A
.
Perché è così? Perché no
def reduceLeft (f: (A, A) => A): A
Sappiamo già che la testa della sequenza è tipo A
E quindi non riesco a pensare a come B
potrebbe essere qualcosa di diverso da essere uguale a A
. Puoi fornire un esempio dove B
è del super-tipo?
Soluzione
Diciamo che la tua classe B ha un metodo combine(other:B): B
. Ora chiami reduceLeft((b,a) => b.combine(a))
in un elenco di A
S. Dal momento che il tipo di ritorno di combine
è B
il parametro di tipo a reduceLeft
deve essere B
.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow