我试图"打开包装"从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
。有没有办法参数化这样的作业?
答案 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