我有一个这样的源文件:
replace 1 3 xyz
reverse 0 2
print 1 4
我想使用数组通过行分配这些元素:
val Array(action, start, end, sub) = src.next.split(“ “)
您可以看到第四元素是可选的,我不知道如何管理这种不一致。有什么方法可以使最后一个任务可选?
val Array(action, start, end, x @ _*) = src.next.split(" ")
这将匹配action, start, end
与前3个元素,将x
与Seq[String]
匹配。然后,您可以使用x.headOption
将第四元素作为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)
有多种方法可以解决此问题。这是简洁的,但将所有内容变成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
如果您只想将第四作为Option
,则必须将其作为单独的任务。
val Array(action, start, end) = line.take(3)
val sub = line.lift(3)