2010-12-04 7 views
0

Existe-t-il un moyen de passer un paramètre supplémentaire à la fonction fournie à List.foldRight de Scala?Passer des paramètres supplémentaires à foldRight

Quelques exemples de code:

def createActorPool[T](implicit actor: Manifest[T], poolSize: Int): List[Supervise] = { 
    (1 to poolSize).foldRight(List[Supervise]()) { 
    (idx, list) => { Supervise(actorOf[actor], Permanent) :: list } 
    } 
} 

L'objet que je suis intéressé est actor, qui est toutefois pas visible lorsqu'il est utilisé pour construire Supervise.

P.S.: Je suis assez nouveau pour Scala, alors s'il vous plaît accepter mes excuses si c'est une FAQ (malgré un googling étendu sans tous les hits applicables).

Répondre

3

Je ne comprends pas vraiment votre problème. La fonction transmise à foldRight est libre de référencer et d'utiliser tout ce que vous avez dans la portée. N'est-ce pas assez?

+0

Hm ... C'est. J'ai probablement mal interprété un message d'erreur du compilateur (le plugin IDEA Scala se plaignait d'un symbole insoluble), donc j'avais l'impression que l'acteur ne serait pas visible. Merci d'avoir clarifié cela! –

2

Dans Scala, les caractères [ et ] sont uniquement utilisés pour les types. Dans l'exemple de code fourni, actor est un objet, pas un type. Cela fonctionnera peut-être:

def createActorPool[T](implicit actor: Manifest[T], poolSize: Int): List[Supervise] = { 
    (1 to poolSize).foldRight(List[Supervise]()) { 
    (idx, list) => { Supervise(actorOf[T], Permanent) :: list } 
    } 
} 
Questions connexes