2010-10-07 5 views
1

Considérons la fonction suivante:inférence de type de fonction partielle dans Scala

def printPfType[T](pf:PartialFunction[T, _])(implicit m:Manifest[T]) = { 
    println(m.toString) 
} 

Puis-je définir la classe de test suivant:

case class Test(s:String, i:Int) 

Je ne peux pas écrire ceci:

printPfType { 
    case Test(_,i) => i 
} 

parce que le compilateur ne peut pas déduire le premier type paramétrique de la fonction partielle. Je dois préciser explicitement:

printPfType[Test] { 
    case Test(_,i) => i 
} 

Mais le type Test apparaît deux fois. Y a-t-il une technique pour éviter cela? Comment puis-je aider le type inferer à éviter le doublon?

Répondre

4

Voir ceci thread. L'inférence de type ne peut pas gérer ce problème. Citation de la spécification:

une fonction anonyme peut être définie par une séquence des cas {cas p1 = > b1. . . case pn => bn} qui apparaît comme une expression sans correspondance préalable . Le type attendu d'une telle expression doit être défini en partie. Il doit être soit scala.Functionk [S1, . . . , Sk, R] pour certains k> 0, ou scala.PartialFunction [S1, R], où le (s) type (s) d'argument S1,. . . , Sk doit être entièrement déterminé, mais le type de résultat peut être indéterminé.

+1

Merci beaucoup. La spécification est claire! – asayn

+0

Vous êtes les bienvenus :) –

Questions connexes