为了澄清,当我说多次分配,并行分配,销毁绑定(bind)时,我的意思是以下匹配模式的gem

scala> val (x,y) = Tuple2("one",1)
x: java.lang.String = one
y: Int = 1

它将"one"分配给x,将1分配给y

我正在尝试做
val (x,y) = "a b".split()

我期望scala会尝试将模式与模式与数组匹配,并且如果数组的长度与模式的长度不匹配,则会抛出运行时异常。

我所有尝试将Array轻松转换为Tuple2的尝试都是徒劳的。
scala> Tuple2(Array(1,2):_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
       Tuple2(Array(1,2):_*)
       ^

scala> Tuple2(Array(1,2).toList:_*)
<console>:7: error: wrong number of arguments for method apply: (T1,T2)(T1, T2)
in object Tuple2
       Tuple2(Array(1,2).toList:_*)

有什么巧妙的方法可以对数组或列表使用多重赋值?

最佳答案

您需要做的就是使val边(=的左侧)与初始化程序(=的右侧)兼容:

scala> val Array(x, y, z) = "XXX,YYY,ZZZ".split(",")
x: java.lang.String = XXX
y: java.lang.String = YYY
z: java.lang.String = ZZZ

如您所料,如果数组大小不匹配(在上面的示例中不是3),则会在运行时抛出scala.MatchError

10-06 10:58