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?

Était-ce utile?

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 As. É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
scroll top