提问人:sparkless 提问时间:1/25/2023 最后编辑:Dmytro Mitinsparkless 更新时间:1/25/2023 访问量:80
Scala 中内联函数内的 Return 关键字
Return keyword inside the inline function in Scala
问:
我听说不要在 Scala 中使用 Return 关键字,因为它可能会改变程序的流程,例如;
// this will return only 2 because of return keyword
List(1, 2, 3).map(value => return value * 2)
这是我的情况;我有递归案例类,并使用DFS对其进行一些计算。因此,最大深度可能是 5。这是模型;
case class Line(
lines: Option[Seq[Line]],
balls: Option[Seq[Ball]],
op: Option[String]
)
我正在使用 DFS 方法来搜索这个递归模型。但在某些时候,如果数据中存在特殊值,我想停止遍历剩下的数据,而是直接返回结果。下面是一个示例;
Line(
lines = Some(Seq(
Line(None, Some(Seq(Ball(1), Ball(3))), Some("s")),
Line(None, Some(Seq(Ball(5), Ball(2))), Some("d")),
Line(None, Some(Seq(Ball(9))), None)
)),
balls = None,
None
)
在此数据中,如果我遇到 ,我想返回类似“NOT_OKAY”,这意味着我不再需要对 进行任何操作。否则,我将使用给定运算符对 each 应用计算。Ball(5)
Ball(2) and Ball(9)
Ball(x)
我正在使用这种DFS方法;
def calculate(line: Line) = {
// string here is the actual result that I want, Boolean just keeps if there is a data that I don't want
def dfs(line: Line): (String, Boolean) = {
line.balls.map{_.map { ball =>
val result = someCalculationOnBall(ball)
// return keyword here because i don't want to iterate values left in the balls
if (result == "NOTREQUIRED") return ("NOT_OKAY", true)
("OKAY", false)
}}.getOrElse(
line.lines.map{_.map{ subLine =>
val groupResult = dfs(subLine)
// here is I'm using return because I want to return the result directly instead of iterating the values left in the lines
if (groupResult._2) return ("NOT_OKAY", true)
("OKAY", false)
}}
)
}
.... rest of the thing
}
在本例中,我在内联函数中使用 return 关键字,并完全更改了内部映射函数的行为。我刚刚读到一些关于在 Scala 中不使用关键字的内容,但无法确定这是否会产生问题。因为就我而言,如果我遇到一个我不想看到的值,我不想做任何计算。此外,我找不到摆脱返回关键字的功能方法。return
在这里使用return关键字是否有任何副作用,如堆栈异常等?我总是对其他方式持开放态度。非常感谢!
答: 暂无答案
评论
Option[Seq[...]]
Seq[...]
Some(Nil)
None