我有2个n元组,我需要将它们的值合并为函数foo
的参数。当前,我使用Array
保存合并的值,这会使函数调用看起来很愚蠢。
我想知道是否有一个很好的方法来合并两个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))
答案 0 :(得分:1)
这可以通过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))