为了澄清,当我说多次分配,并行分配,销毁绑定(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
。