2010-07-06 8 views
3
def mainCaller() = { 
    val name = "xyz" 
    someList.foreach { u:Map => foo(name, u) } 
} 

def foo(name:String)(map:Map): Unit = { 
    //match case.... 
    //recursive call to foo in each case where name remains same, but map changes 
} 

comment puis-je écrire foo en fonction partiellement appliquée, où je ne dois passer le nom dans chaque appel récursif et il suffit d'appeler foo(map1)?fonctions récursives partiellement appliquées

Répondre

8

Deux options:

def foo(name:String)(map:Map): Unit = { 
    val bar = foo(name)_ 
    //match case... 
    // case 1: 
    bar(x) 

    // case 2: 
    bar(y) 
} 

Ou:

def foo(name:String): Map => Unit = { 
    def bar(map: Map): Unit = { 
     //match case... 
     // case 1: 
     bar(x) 

     // case 2: 
     bar(y) 
    } 
    bar 
} 
+0

Tout simplement génial !! Est-ce que les deux ont des avantages et des inconvénients. La première méthode semble beaucoup plus propre. – scout

+0

@scout: Je ne peux pas penser à des (dés) avantages pour l'un ou l'autre. J'ai fait une erreur d'ailleurs. Dans le premier exemple, il faut un trait de soulignement après 'foo (nom)'. – sepp2k