在递归方法中修改 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)
}
我正在尝试在 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)
}