如何从列表中解压缩项目?

时间:2014-08-06 02:44:29

标签: scala

我试图"打开包装"从List到4个单独val s

的项目
def myFunc(myList: List[Int]): Unit = {
    val (w,x,y,z) = myList
    // Compile error
}

如果我运行此命令,则会收到以下错误:

Error:(16, 9) constructor cannot be instantiated to expected type;
 found   : (T1, T2, T3, T4)
 required: List[Int]
    val (w, x, y, z) = myList
        ^

因此,看起来编译器无法推断出来自List[Int]的所有内容实际上仍然是Int。有没有办法参数化这样的作业?

2 个答案:

答案 0 :(得分:7)

除了Ionut的回答,您也可以这样做:

scala> val List(a, b, c, d) = List(1, 2, 3, 4)
a: Int = 1
b: Int = 2
c: Int = 3
d: Int = 4

这可能更符合您在开始时尝试的内容

如果列表长于所需的元素数,您也可以这样做:

scala> val List(a, b, c, rest @ _*) = List(1, 2, 3, 4, 5, 6)
a: Int = 1
b: Int = 2
c: Int = 3
rest: Seq[Int] = List(4, 5, 6)

答案 1 :(得分:4)

问题在于您尝试使用4元组提取器对列表进行模式匹配。试试这个:

scala> val a :: b :: c :: d :: rest = List(1, 2, 3, 4, 5, 6, 7)
a: Int = 1
b: Int = 2
c: Int = 3
d: Int = 4
rest: List[Int] = List(5, 6, 7)

scala> val (a, b, c, d) = (1, 2, 3, 4)
a: Int = 1
b: Int = 2
c: Int = 3
d: Int = 4