地图不需要在Scala中推断出codomain?

Rod*_*igo 0 functional-programming scala

以下Scala代码:

val l = List((1,2),(2,3),(3,4))
def fun1(t1: Int,t2: Int) = (t1+1,t2)
l map fun1
Run Code Online (Sandbox Code Playgroud)

给出错误:

Error:(3, 8) type mismatch;
 found   : (Int, Int) => (Int, Int)
 required: ((Int, Int)) => ?
l map fun1;}
      ^
Run Code Online (Sandbox Code Playgroud)

我想知道为什么map必须有一个codomain没有推断类型的函数...

And*_*kin 6

这不是在陪域,这是错误的函数arity.The方法map愿与单参数的函数,即使这种说法是一个元组:

((Int, Int)) => (Int, Int) // Function[(Int, Int), (Int, Int)]
Run Code Online (Sandbox Code Playgroud)

但是你传递的函数有两个参数(两个int):

(Int, Int) => (Int, Int)   // Function2[Int, Int, (Int, Int)]
Run Code Online (Sandbox Code Playgroud)

这样做:

def fun1(t: (Int, Int)) = (t._1+1, t._2)
l map fun1
Run Code Online (Sandbox Code Playgroud)

或这个:

def fun1(t1: Int,t2: Int) = (t1+1,t2)
l map { case (x, y) => fun1(x, y) }
Run Code Online (Sandbox Code Playgroud)

这是一个类似的例子,对类似问题有更详细的解释.