Pourquoi la ligne 1 et 2 œuvres, mais 3 échec ¿:Fonction variable: éléments Somme de la liste
val sum1= (a: Int, b: Int, c: Int) => a + b + c //OK
List(1,2,3).reduceLeft(_+_) //OK
val sum2 =(x: List) =>x.reduceLeft(_+_) //Fail
Pourquoi la ligne 1 et 2 œuvres, mais 3 échec ¿:Fonction variable: éléments Somme de la liste
val sum1= (a: Int, b: Int, c: Int) => a + b + c //OK
List(1,2,3).reduceLeft(_+_) //OK
val sum2 =(x: List) =>x.reduceLeft(_+_) //Fail
Vous devez ajouter le type d'élément à x: List
, il devient List[Int]
ou List[Double]
. List
lui-même est un raw type
, ce qui est illégal dans Scala. Sans l'annotation de type, le compilateur ne sait pas non plus ce que l'opérateur +
signifie dans la partie reduceLeft(_+_)
, il doit donc produire une erreur.
Le compilateur manque la preuve que les objets sous-jacents List
sont un type qui définit l'opérateur +
. Voici une bonne façon d'utiliser la bibliothèque Scala sous-jacente pour définir une méthode capable d'ajouter une liste de n'importe quel type numérique.
Pour cela, vous n'avez même pas besoin de reduce
, car Scala définit déjà sum
. List
est une construction de type plus élevé, plus de détails here.
def addList[T : Numeric](list: List[T]): T = list.sum
Vous devez ajouter le type d'élément à 'x: list', il devient' Liste [Int] '' ou Liste [Double] 'ou tout ce que vous avez besoin. – Clashsoft
** Oui **, merci, vous êtes dans True –