Option [Int]作为循环索引

问题描述 投票:0回答:1

我是Scala的新手,所以我不知道我是否会提出明显的要求。

我目前正在尝试定义一个可以或不能接收称为“位置”的参数的函数。此参数是一个Int(如果用户决定通过它)。否则,应将其视为“无”(因为这意味着没有任何内容作为参数传递)。如果它为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)。

我一直在尝试不同的方法来将这个“位置”设置为可选值,但是我无法弄清楚。

提前感谢!

scala loops option
1个回答
0
投票

欢迎来到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) {
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.