scala valeur toInt n'est pas un membre de l'une Quelconque
La println dans le code suivant fonctionne (avec ou sans toInt)
println("retweets : ", e.getOrElse("retweets", 0).toInt)
top10Tweets(""+e.get("text").get, e.getOrElse("retweets", 0).toInt)
Mais quand je le passe en argument d'une fonction (comme ci-dessus), il ne fonctionne pas. Il dit: "la valeur toInt n'est pas membre d'un"
Quand j'enlève toInt, dit-il,
type mismatch;
[error] found : Any
[error] required: Int
e est une Carte, comme suit,
def tweetDetails(obj: twitter4j.Status) = {
Map(
"id" -> obj.getUser().getId(),
"screenName" -> obj.getUser().getScreenName(),
"text" -> obj.getText(),
"retweets" -> obj.getRetweetCount(),
"mentions" -> obj.getUserMentionEntities().length)
}
signature de top10Tweets,
def top10Tweets(tweets: String, retweet_c: Int, mention_c: Int) = {
}
Veuillez fournir un exemple complet, en particulier le type de
e
.OriginalL'auteur user644745 | 2013-07-16
Vous devez vous connecter pour publier un commentaire.
modifier:
Ok, avec les nouvelles informations, je vous suggère de créer un cas de classe qui détient les données au lieu d'utiliser un
Map
, de cette façon, vous permettra de conserver des informations de type. Je sais qu'il est commun d'utiliser des hachages/cartes pour que, dans typées dynamiquement langues, mais dans des langages statiquement typés comme scala types de données sont le moyen privilégié.orig:
Que je ne sais ce que
e
est, ni ce qu'signaturetop10Tweets
a, je ne peux que supposer. Mais à partir de votre code et l'erreur je suppose quee
est unMap[String, String]
et que vous essayez d'obtenir la représentation sous forme de chaîne d'un nombre entier pour la clé"retweets"
et la convertir en unInt
. En tant que valeur par défaut que vous passez unInt
, de sorte que le type inferencer déduit typeAny
, parce que c'est la plus fréquente des super type deString
etInt
. CependantAny
ne dispose pas d'untoInt
méthode et donc vous obtenez le message d'erreur.Passer soit à la valeur par défaut comme
String
, ou convertir la valeur de"retweets"
à unInt
avant, si elle existe:De toute façon un peu plus d'informations permettrait de donner une réponse précise.
Salut Drexin, Merci. Pourriez-vous me donner un exemple sur la façon d'utiliser le "cas de la classe" au lieu de la Carte ?
C'est plutôt un truc de base, donc je vous suggère de lire un bon livre sur la scala pour apprendre les bases. Pragramming en Scala par Martin Odersky (le créateur de la scala) est disponible gratuitement en ligne.
OriginalL'auteur drexin
Oui, parce que la Carte est "string" -> "string" et que Vous avez fait quand getOrElse ( d'autre), chaîne -> int, c'est pourquoi il est Tout.
fonctionne très bien ou Vous pouvez:
toInt
est superflu. La valeur retournée est déjà unInt
.OriginalL'auteur daaatz
Le même problème qui me dérange avant, vous pouvez vérifier ci-dessous
OriginalL'auteur Y.fei