澄清一下,当我说多重赋值、并行赋值、解构绑定(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
如您所料,
scala.MatchError
如果数组大小不匹配(在上面的示例中不是 3),将在运行时抛出。
关于arrays - scala中非元组的多重赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2381666/