考慮這個例子:
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反之亦然這裏和那裏的功能。