2016-07-24 72 views
0

的和元素为什么1号线和2项工程,但3失败¿?变量函数:列表

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

你应该元素类型添加到'X:List',因此它成为'列表[INT]'或'列表[双]'或者任何你需要的。 – Clashsoft

+0

**是**,谢谢,你是真的 –

回答

1

你必须元素类型添加到x: List,因此它成为List[Int]List[Double]List本身是一个raw type,这在Scala中是非法的。如果没有类型注释,编译器也不知道reduceLeft(_+_)部分中+运算符的含义,所以它必须产生错误。

0

编译器缺少证明List中的基础对象是定义+运算符的类型。这里有一个很好的方式来使用底层的Scala库来定义一个能够添加任何数值类型的List的方法。

为此,您甚至不需要reduce,因为Scala已经定义了sumList是一种较高温度型建材,更多详情here

def addList[T : Numeric](list: List[T]): T = list.sum