不幸的是,你不能以类型安全的方式做到这一点。在编译时必须知道元组性。数组的长度只有在运行时才知道,因为集合的长度是任意的。
之后你可能想对这个元组做点什么。问题是,您需要编写一段代码来处理所有元组情况,例如;
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