Option[Int] 作为循环中的索引

Option[Int] as index in loop

我是 Scala 的新手,所以我不知道我是否会问一些显而易见的问题。

我目前正在尝试定义一个可以或不可以接收名为 "position" 的参数的函数。此参数是一个 Int(以防用户决定传递它)。否则,它应该被视为 "None"(因为这意味着没有任何内容作为参数传递)。 如果它是 None,则: position = series.length - 1. 我在这里尝试使用 Option,因为我不希望用户在不需要时传递位置。

def example(series: Vector[Double], position: Option[Int]): Vector[Double] = {
  position match {
    case Some(value) =>  value
    case None => series.length - 1
  }
  for (i <- position until series.length) {
    ...
  }
}

但是当我尝试在循环中将它作为整数使用时,它给我一个错误(类型不匹配。需要:CanBuildFrom[Nothing, Int, NotInferedCol[Int]]。找到:Int)。

我一直在尝试不同的方法使这个 "position" 成为一个可选值,但我想不通。

提前致谢!

欢迎来到 SO,Raquel。

您的代码中的问题是这个

position match {
  case Some(value) =>  value
  case None => series.length - 1
}

是一个不会改变 position 值的表达式,这可能是您所假设的。

您必须绑定表达式产生的值才能在它下面的代码中使用它:

val positionWithDefault =
  position match {
    case Some(value) => value
    case None => series.length - 1
  }
for (i <- positionWithDefault until series.length) {
  ...
}

此外,如评论中所述,match 表达式的行为与您从 getOrElse

中得到的相同
for (i <- position.getOrElse(series.length - 1) until series.length) {
  ...
}