2016-07-27 1 views
0

Je rencontre un problème étrange. Je suis en train d'écrire une simple classe implicite:Incompatibilité de type, trouvé Int requis Chaîne

private implicit class CounterMap[A](map: Map[A, Int]) { 
    def updateCounter(k: A): Map[A, Int] = 
    map + (k → map.getOrElse(k, 0) + 1) 
} 

mais quand je tente de compiler, je reçois l'erreur suivante:

error: type mismatch; found : Int(1) required: String map + (k → map.getOrElse(k, 0) + 1)

Ce poste semblait similaire Scala - type mismatch; found Int, required String, mais il ne semble pas évident pour moi que j'ai fait la même erreur. Je suis assez novice dans l'utilisation des classes implicites et des génériques dans Scala, il est donc probable qu'il me manque quelque chose d'évident ici. Toute aide ou explication pour expliquer pourquoi je reçois cette erreur serait incroyable.

Merci d'avance.

Répondre

2

Le problème semble être entre parenthèses. Entourez l'expression intérieure entre parenthèses, comme indiqué ci-dessous:

map + (k -> (map.getOrElse(k, 0) + 1)) 

Autre poste que vous avez mentionné avait un problème différent. Dans ce post, Int a été utilisé comme paramètre de type, ce qui n'est pas le cas ici.

+0

La flèche est très bien, mais votre réponse a révélé ce qui n'allait pas avec mon code. Le problème était qu'il me manquait la parenthèse autour de l'opération d'addition. Si vous modifiez cela, j'accepterai votre réponse. – Vikram

+0

Ah, d'accord. Je pensais que '→' était copié/collé de quelque part. Bon à savoir que cela a fonctionné pour vous. –

+0

Merci pour l'aide, qui me rendait fou :) – Vikram