使用Array进行多次赋值,但带有可选元素

时间:2017-11-29 07:38:23

标签: scala

我有一个这样的源文件:

replace 1 3 xyz
reverse 0 2
print 1 4

我想使用Array:

逐行分配这些元素
val Array(action, start, end, sub) = src.next.split(“ “)

正如您所看到的,第4个元素是可选的,我不知道如何管理这种不一致。有没有办法让最后一个作业可选?

2 个答案:

答案 0 :(得分:3)

val Array(action, start, end, x @ _*) = src.next.split(" ")

这会将action, start, end与前3个元素匹配,将xSeq[String]匹配。然后,您可以使用x.headOption将第4个元素作为Option。 如果超过4,则它们都将包含在x

val line = "replace 1 3 xyz"
val Array(action, start, end, x @ _*) = line.split(" ")
// action: String = replace
// start: String = 1
// end: String = 3
// x: Seq[String] = Vector(xyz)

答案 1 :(得分:2)

有很多不同的方法可以解决这个问题。这是一个简洁但却将所有内容都变成Option的内容。

val line = "reverse 0 2".split(" ")

val Seq(action, start, end, sub) = 0.to(3).map(line.lift)
//action: Option[String] = Some(reverse)
//start: Option[String] = Some(0)
//end: Option[String] = Some(2)
//sub: Option[String] = None

如果您只想将第4个作为Option,那么您必须将其作为单独的作业。

val Array(action, start, end) = line.take(3)
val sub                       = line.lift(3)