以下代码中的 println 有效(有或没有 toInt )
println("retweets : ", e.getOrElse("retweets", 0).toInt)
top10Tweets(""+e.get("text").get, e.getOrElse("retweets", 0).toInt)
但是当我将它作为函数的参数传递时(如上),它不起作用。它说“值 toInt 不是 Any 的成员”
当我删除 toInt 时,它说,
type mismatch;
[error] found : Any
[error] required: Int
e 是一个 Map,如下所示,
def tweetDetails(obj: twitter4j.Status) = {
Map(
"id" -> obj.getUser().getId(),
"screenName" -> obj.getUser().getScreenName(),
"text" -> obj.getText(),
"retweets" -> obj.getRetweetCount(),
"mentions" -> obj.getUserMentionEntities().length)
}
前10条推文的签名,
def top10Tweets(tweets: String, retweet_c: Int, mention_c: Int) = {
}
最佳答案
编辑 :
好的,有了新信息,我建议您创建一个保存数据的案例类,而不是使用 Map
,这样您将保留类型信息。我知道在动态类型语言中使用哈希/映射是很常见的,但在静态类型语言中,scala 数据类型是首选方式。
原 :
因为我不知道是什么 e
是,也没有什么签名top10Tweets
有,我只能假设。但是根据您的代码和错误,我假设 e
是 Map[String, String]
并且您正在尝试获取键 "retweets"
的整数的字符串表示形式并将其转换为 Int
.作为默认值,您传入 Int
,所以类型推断器推断类型 Any
,因为那是String
最常见的父类(super class)型和 Int
.然而Any
没有 toInt
方法,因此你会得到错误。
Map("x" -> "2").getOrElse("x", 4).toInt
<console>:8: error: value toInt is not a member of Any
Map("x" -> "2").getOrElse("x", 4).toInt
将默认值作为
String
传递, 或转换 "retweets"
的值到 Int
之前,如果它存在:e.get("retweets").map(_.toInt).getOrElse(0)
无论如何,多一点信息将有助于给出准确的答案。
关于scala 值 toInt 不是 Any 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17673958/