考虑这个例子:
scala> def mult = (x: Int, y: Int) => x * y
mult: (Int, Int) => Int
scala> val list = List(1, 2, 3)
list: List[Int] = List(1, 2, 3)
scala> list zip list map mult
<console>:10: error: type mismatch;
found : (Int, Int) => Int
required: ((Int, Int)) => ?
list zip list map mult
^
scala> list zip list map mult.tupled
res4: List[Int] = List(1, 4, 9)
有你在哪里结束配对的元组元素很多情况下。在这种情况下,你需要一个元组函数来处理它。但是还有很多其他的地方,那就是不是是真的!例如:
scala> list.foldLeft(1)(mult)
res5: Int = 6
scala> list.foldLeft(1)(mult.tupled)
<console>:10: error: type mismatch;
found : ((Int, Int)) => Int
required: (Int, Int) => Int
list.foldLeft(1)(mult.tupled)
^
所以,基本上,Scala有元组和参数之间的对立,这意味着你必须转换从tupled到untupled反之亦然这里和那里的功能。