我试图将一个项目从一个List单独val的"解包" 到另外4个单独的s中
def myFunc(myList: List[Int]): Unit = {
val (w,x,y,z) = myList
// Compile error
}
Run Code Online (Sandbox Code Playgroud)
如果我运行它,我会收到以下错误:
Error:(16, 9) constructor cannot be instantiated to expected type;
found : (T1, T2, T3, T4)
required: List[Int]
val (w, x, y, z) = myList
^
Run Code Online (Sandbox Code Playgroud)
因此,看起来编译器无法推断出来的所有内容List[Int]实际上仍然Int是s.有没有办法参数化这样的作业?
除了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
Run Code Online (Sandbox Code Playgroud)
这可能更符合您在开始时尝试的内容
如果列表长于所需的元素数,您也可以这样做:
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)
Run Code Online (Sandbox Code Playgroud)
问题是您正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
718 次 |
| 最近记录: |