arrays - scala中非元组的多重赋值

标签 arrays scala functional-programming pattern-matching variable-assignment

澄清一下,当我说多重赋值、并行赋值、解构绑定(bind)时,我指的是以下模式匹配 gem

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

分配"one"x1y .

我试图做
val (x,y) = "a b".split()

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

我所有尝试轻松转换 ArrayTuple2是徒劳的。
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/

相关文章:

java - Akka 对向远程参与者发送大量消息的警告

c++ - std::ptr_fun 模板化类和结构的参数困难

java - 如何在不使用 ArrayList 的情况下在数组中添加两个单独的对象?

javascript - 使用 JavaScript 拆分逗号分隔的字符串但忽略分号之间的逗号

java - 将二维数组传递给构造函数

mysql - 如何实现 Slick + MySQL + SecureSocial?

java是否循环复制对象?

scala - Scala 中 Select 语句中的 Math.abs 函数

python函数返回函数

programming-languages - 联合类型和交集类型