的和元素为什么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
的和元素为什么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
你必须元素类型添加到x: List
,因此它成为List[Int]
或List[Double]
。 List
本身是一个raw type
,这在Scala中是非法的。如果没有类型注释,编译器也不知道reduceLeft(_+_)
部分中+
运算符的含义,所以它必须产生错误。
编译器缺少证明List
中的基础对象是定义+
运算符的类型。这里有一个很好的方式来使用底层的Scala库来定义一个能够添加任何数值类型的List的方法。
为此,您甚至不需要reduce
,因为Scala已经定义了sum
。 List
是一种较高温度型建材,更多详情here。
def addList[T : Numeric](list: List[T]): T = list.sum
你应该元素类型添加到'X:List',因此它成为'列表[INT]'或'列表[双]'或者任何你需要的。 – Clashsoft
**是**,谢谢,你是真的 –