不幸的是,您不能以类型安全的方式执行此操作。元组数量必须在编译时已知。您的数组长度仅在运行时知道,因为集合具有任意长度。
之后你可能想对这个元组做点什么。问题是您需要编写一个处理所有元组情况的代码,例如;
array match {
case Array(first)=> ???
case Array(first, second) => ???
case Array(first, second, third) => ???
...
case Array(first, second, third, fourth, fifth, sixth, seventh, .... twentysecond) => ???
case _ => // What to do now?
}
之所以这样,是因为我们不知道这个数组->编译时元组操作的结果是什么,所以我们涵盖了所有情况。
如果我们知道我们的数组在编译时有多少个元素,我们可以使用Shapeless 在下面做类似的事情,就像在另一个question 中回答的那样
import shapeless._
import HList._
import syntax.std.traversable._
val x = List(1, 2, 3)
val y = x.toHList[Int::Int::Int::HNil]
val z = y.get.tupled