scala 数值求和列表

2024-04-30

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

以下代码无法编译:

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 is 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))
}

Or:

def sum[T](x: List[T])(implicit num: Numeric[T]): T = {
  import num._
  if (x.isEmpty) zero
  else x.head + sum(x.tail)
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scala 数值求和列表 的相关文章

随机推荐