多次分配使用数组,但具有可选元素

  • 本文关键字:元素 分配 数组 scala
  • 更新时间 :
  • 英文 :


我有一个这样的源文件:

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个元素,将xSeq[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)

最新更新