有合并两个n元组的好方法吗?

Is there a good way to merge two n-tuples?

我有 2 个 n 元组,我需要合并它们的值作为函数的参数 foo。目前我使用 Array 来保存合并值,这使得函数调用看起来很愚蠢。 我想知道是否有合并 2 个 n 元组的好方法,比如将结果保存到一个新的 n 元组中(然后我就可以调用函数 foo.tupled(mergedT))。

def foo(p1: T, p2: T, p3: T, p4: T) = { ... }
val T1 = ... // a 8-tuple
val T2 = ... // a 8-tuple
def mergeValue[T](x: T, y: T): T = { ... }

val mv = T1.productIterator.zip(T2.productIterator).map(pair => mergeValue(pair._1, pair._2)).toArray
foo(mv(0), mv(1), mv(2), mv(3), mv(4), mv(5), mv(6), mv(7))

这可以用 Shapeless 来完成。

尝试

type T = String
def foo(p1: T, p2: T, p3: T, p4: T, p5: T, p6: T, p7: T, p8: T) = p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8
val T1 = ("0", "1", "2", "3", "4", "5", "6", "7")
val T2 = ("a", "b", "c", "d", "e", "f", "g", "h")

def mergeValue[T](x: T, y: T): T = ???

import shapeless.poly.->, shapeless.syntax.std.tuple._

object p extends ((T, T) -> T)((mergeValue[T] _).tupled)

(foo _).tupled(T1.zip(T2).map(p))