在递归方法中修改 Scala 参数

Modifying Scala arguments in recursive method

我正在尝试在 Scala 中实现递归方法,但 运行 遇到了可变性问题(我是 Scala 的新手):

def findMembersRecursive(path : String, members : Set[String]) : Unit = {
    val candidates : Set[String] = candidateService.getProspectiveCandidates(path)

    candidates.foreach { candidate =>
        if(candidate.endsWith("hello")) {
            members ++= candidate
        } else {
            findMembersRecursive(candidate, members)
        }
    }
}

所以我们的想法是,当我们递归执行时,这组字符串 (members) 会增长。

这里不允许我将 candidate 添加到 members 因为 members 似乎是不可变的。关于如何重构代码以递归工作的任何想法?

我会这样实现这个功能:

def findMembersRecursive(path: String): Set[String] = 
  candidatesService
    .getProspectiveCandidates(path)
    .flatMap { 
      case candidate if candidate.endsWith("hello") => Set(candidate)
      case candidate => findMembersRecursive(candidate)
    }