以下代码中的println可以工作(带或不带toInt)
println("retweets : ", e.getOrElse("retweets", 0).toInt)
top10Tweets(""+e.get("text").get, e.getOrElse("retweets", 0).toInt)
但当我将其作为函数的参数传递时(如上所述),它不起作用。上面写着“Value to Int不是任何
当我删除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)
}
TOP10推文签名,
def top10Tweets(tweets: String, retweet_c: Int, mention_c: Int) = {
}
3条答案
按热度按时间j13ufse21#
编辑:
好的,有了新的信息,我建议您创建一个Case类来保存数据,而不是使用
Map
,这样您就可以保留类型信息。我知道在动态类型的语言中使用散列/Map是很常见的,但在静态类型的语言中,Scala数据类型是首选方式。orig:
因为我既不知道
e
是什么,也不知道top10Tweets
有什么签名,我只能假设。但是从您的代码和错误中,我假设e
是Map[String, String]
,并且您正在尝试获取关键字"retweets"
的整数的字符串表示,并将其转换为Int
。作为缺省值,传入Int
,因此类型推断器推断类型Any
,因为这是String
和Int
最常见的超类型。但是,Any
没有toInt
方法,因此会出现错误。将缺省值作为
String
传递,或者将"retweets"
的值转换为之前的Int
(如果存在):无论如何,多一点信息将有助于给出准确的答案。
ehxuflar2#
是的,因为在Map中是“字符串”->“字符串”,而当getOrElse(Else)字符串->int时,你是这样做的,这就是为什么它是ANY。
工作正常,或者您可以:
kmbjn2e33#
同样的问题困扰着我,你还没来得及查看下面