2017-02-28 4 views
0

récursive Je suis en train de mettre en œuvre une méthode récursive à Scala et je suis en cours d'exécution sur les questions de mutabilité (je suis tout nouveau à Scala):Modifier arguments Scala dans la méthode

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) 
     } 
    } 
} 

L'idée est que nous exécuter récursivement, cet ensemble de chaînes (members) se développe.

Ici, il ne me laisse pas ajouter candidate à members parce que members semble être immuable. Des idées sur la façon dont je pourrais refactoriser le code pour fonctionner récursivement?

+0

Pourquoi faites-vous pas des membres de retour findMembersRecursive? Pourquoi voulez-vous garder les «membres» comme argument? – Nyavro

Répondre

1

J'implémenter cette fonction ainsi:

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