我是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)。
我一直在尝试不同的方法来将这个“位置”设置为可选值,但是我无法弄清楚。
提前感谢!
欢迎来到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) {
...
}