数值的标量总和列表

标签 scala

我想要一个通用函数来对列表中的值求和。

以下代码无法编译:

def sum[T : Numeric](x: List[T]): T = {
    if(x.isEmpty) 0
    else x.head + sum(x.tail)

  }

编译错误是:
error: type mismatch;

[INFO]  found   : Int(0) 

[INFO]  required: T

[INFO]     if(x.isEmpty) 0

最佳答案

此错误告诉您已指定返回类型为 T ,但你总是返回一个 0对于空列表,它是 Int .如果传入的列表包含其他内容,即 T 怎么办?是 Double或一些自定义类型?尝试这个:

if(x.isEmpty) implicitly[Numeric[T]].zero

完整的工作方法:
def sum[T : Numeric](x: List[T]): T = {
  if (x.isEmpty) implicitly[Numeric[T]].zero
  else implicitly[Numeric[T]].plus(x.head, sum(x.tail))
}

或者:
def sum[T](x: List[T])(implicit num: Numeric[T]): T = {
  import num._
  if (x.isEmpty) zero
  else x.head + sum(x.tail)
}

关于数值的标量总和列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46735685/

相关文章:

scala - 如何更改 Apache SparkSQL `Project` 运算符中的属性顺序?

scala - 如何重用 SBT 模块项目定义

Scala不能乘Java Doubles吗?

scala - Scala 中的多个 Trait 构造错误

database - scalaquery 中的不同开发/生产数据库

scala - '结果的长度应为 3' : How does the ScalaTest DSL work?

scala - 从 Scala 的列表列表中删除零行

scala - 在 Scala 中混契约(Contract)步、异步和并行计算以理解 future 的最惯用方式

scala - 为什么它不解码为 ADT 类型?

scala - 回调中的 future 在同一线程中运行