使用元组进行Scala折叠操作

Tyr*_*ter 2 scala

val g = List(1,2,3)

val k = g.fold((0,0))((a:Tuple2[Int,Int],b:Int)=>(a._1+b,a._2+1))
Run Code Online (Sandbox Code Playgroud)

但我得到以下错误=

found   : ((Int, Int), Int) => (Int, Int)
 required: (Any, Any) => Any
              g.fold((0,0))((a:Tuple2[Int,Int],b:Int)=>(a._1+b,a._2+1))
Run Code Online (Sandbox Code Playgroud)

有人可以解释,为什么它期待"任何"类型.

但下面的工作:

g.map((_,1))

g.map((_,1)).fold((0,0))((a,b)=> (a._1+b._1,a._2+b._2))
res211: (Int, Int) = (6,3)
Run Code Online (Sandbox Code Playgroud)

Lee*_*Lee 7

看起来你的意思是使用foldLeft:

val k = g.foldLeft((0,0))((a:Tuple2[Int,Int],b:Int)=>(a._1+b,a._2+1))
Run Code Online (Sandbox Code Playgroud)

fold 有签名

def fold[A1 >: A](z: A1)(op: (A1, A1) ? A1): A1 
Run Code Online (Sandbox Code Playgroud)

所以它需要元素类型匹配累加器类型,而您的示例具有不同的类型.