2016-07-24 2 views
0

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 
+2

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

+0

** Oui **, merci, vous êtes dans True –

Répondre

1

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.

0

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