是否有scala方法调用此函数,直到它返回None(除了默认的java循环和检查方式)
def process(
writer: Option[FileWriter],
request: SomeRequest
)(nextId: Option[String], pageNumber: Int): Option[String] = {
这个函数在另一个我不想触摸的情况下已经在foldLeft中调用了。另外,当它被反复调用时,如果是Some(nextId)而不是None,我需要将返回值传递给nextId参数。
否则,我想我可以做一个var nextId = retValue,但我讨厌在scala中使用vars。感觉我无法做对。
感谢, 迪安
答案 0 :(得分:2)
无法定义另一个调用函数的函数,如下所示:
import scala.annotation.tailrec
@tailrec
def loop(wrt:Option[FileWriter], req:SomeRequest)(nxt:Option[String], pg:Int) = {
process(wrt, req)(nxt, pg) match {
case res:Some[String] =>
loop(wrt, req)(res, pg + 1)
case None =>
// whatever you need to do when you are done
}
}
编辑:添加了显式的@tailrec注释