调用函数,直到它在scala中返回None

时间:2014-12-12 00:49:33

标签: scala

是否有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。感觉我无法做对。

感谢, 迪安

1 个答案:

答案 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注释