变量函数:List的Sum元素

时间:2016-07-24 14:42:04

标签: scala

为什么第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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

编译器缺少证明List内的基础对象是定义+运算符的类型。这是使用底层Scala lib定义一个能够添加任何数字类型List的方法的好方法。

为此,您甚至不需要reduce,因为Scala已经定义了sumList是一种更高级的类型构造函数,更多详情here

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