【发布时间】:2018-03-25 22:20:01
【问题描述】:
我想要一个通用函数来对列表中的值求和。
以下代码无法编译:
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
【问题讨论】:
-
为什么不直接使用
x.sum(其中x是List[T]而T定义了一个隐含的Numeric[T]实例)? -
我在网上遇到了代码片段,很好奇如何使它更通用。这是一个理解 scala 的练习(我不在学校,只是好奇)
-
顺便说一句,使用这种类型的函数需要注意一件事:它不是 尾递归。如果你有一个很长的列表,你会得到一个堆栈溢出。 (现在我以前在哪里听过这个表达式?)对于尾递归函数,递归调用必须是最后一个表达式。
-
@MIke Allen,感谢您的提醒
标签: scala