Multiple assignment of non-tuples in scala

丶灬走出姿态 提交于 2019-12-02 17:30:34

All you need to do is make your val side (left of the =) compatible with your initializer (right of the =):

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

As you expected, a scala.MatchError will be thrown at runtime if the array size don't match (isn't 3, in the above example).

Since your string can have arbitrary contents, the result cannot be guaranteed to have a 2-tuple-form by the type-system (and no conversion would make sense at all). Therefore you'll have to deal with sequences (like arrays) anyway.

Thankfully there are right-ignoring sequence patterns which allow you to match the result values conveniently nevertheless.

val Seq(x, y, _ @ _*) = "a b".split(" ")
scala> val Array(x, y, _*) = "a b" split " "
x: java.lang.String = a
y: java.lang.String = b
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!