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?

È stato utile?

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 AS. 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
scroll top