scala值toInt不是Any的成员

use*_*745 7 types casting scala option

以下代码中的println有效(带或不带toInt)

println("retweets : ", e.getOrElse("retweets", 0).toInt)

top10Tweets(""+e.get("text").get, e.getOrElse("retweets", 0).toInt)
Run Code Online (Sandbox Code Playgroud)

但是当我将它作为函数的参数传递时(如上所述),它不起作用.它说"价值toInt不是Any的成员"

当我删除toInt时,它说,

    type mismatch;
[error]  found   : Any
[error]  required: Int
Run Code Online (Sandbox Code Playgroud)

e是地图,如下所示,

  def tweetDetails(obj: twitter4j.Status) = {
   Map(
   "id" -> obj.getUser().getId(),
   "screenName" -> obj.getUser().getScreenName(),
   "text" -> obj.getText(),
   "retweets" -> obj.getRetweetCount(),
   "mentions" -> obj.getUserMentionEntities().length)
  }
Run Code Online (Sandbox Code Playgroud)

top10Tweets的签名,

def top10Tweets(tweets: String, retweet_c: Int, mention_c: Int) = {
}
Run Code Online (Sandbox Code Playgroud)

dre*_*xin 7

编辑:

好的,有了新的信息,我建议你创建一个保存数据而不是使用a的case类,Map这样你就可以保留类型信息.我知道在动态类型语言中使用散列/映射很常见,但在静态类型语言中,scala数据类型是首选方式.

来源:

因为我既不知道是什么e,也不知道签名是什么top10Tweets,我只能假设.但是从你的代码和错误我认为e是一个Map[String, String],你正在尝试获取键的整数的字符串表示形式,"retweets"并将其转换为Int.作为默认值传入Int,因此类型推断器推断类型Any,因为这是最常见的超类型StringInt.但是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
Run Code Online (Sandbox Code Playgroud)

无论是传递默认值String,或者转换的值"retweets"Int之前,如果存在的话:

e.get("retweets").map(_.toInt).getOrElse(0)
Run Code Online (Sandbox Code Playgroud)

无论如何,更多的信息将有助于给出准确的答案.