2016-08-29 1 views
-1

J'utilise le code suivant pour obtenir un nombre de mots dans un texteméthode foldLeft dans scala

.foldLeft(Map.empty[String, Float]){ 
    (countsSource, wordSource) => countsSource + (wordSource -> (countsSource.getOrElse(wordSource, 0) + 1))} 

Je reçois une erreur que 1 devrait être une chaîne. Si je le mets entre guillemets, il est dit que ça devrait être un flotteur.

Qu'est-ce que je fais mal ?? Merci pour votre aide à l'avance

+0

Je suis un novice à scala. J'ai essayé de changer 1 à 1.0 sans effet! – kavita

Répondre

1

signature de getOrElse est la suivante:

def getOrElse[B1 >: B](key: A, default: => B1): B1 

Ce qui signifie qu'il ne retourne pas nécessairement le type de la valeur de la carte (B), mais potentiellement un B1 superclasse. Dans votre cas, l'utilisation du littéral 0 n'informe pas le compilateur que vous êtes intéressé par un Float.

En utilisant 0f place fixerait:

l.foldLeft(Map.empty[String, Float]){ 
    (countsSource, wordSource) => countsSource + (wordSource -> (countsSource.getOrElse(wordSource, 0f) + 1))}