Scala Value to Int不是任何

zphenhs4  于 2022-11-09  发布在  Scala
关注(0)|答案(3)|浏览(168)

以下代码中的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) = {
}
j13ufse2

j13ufse21#

编辑

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

orig

因为我既不知道e是什么,也不知道top10Tweets有什么签名,我只能假设。但是从您的代码和错误中,我假设eMap[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

将缺省值作为String传递,或者将"retweets"的值转换为之前的Int(如果存在):

e.get("retweets").map(_.toInt).getOrElse(0)

无论如何,多一点信息将有助于给出准确的答案。

ehxuflar

ehxuflar2#

是的,因为在Map中是“字符串”->“字符串”,而当getOrElse(Else)字符串->int时,你是这样做的,这就是为什么它是ANY。

Map("x" -> 2).getOrElse("x", 4).toInt

工作正常,或者您可以:

Map("x" -> "2").getOrElse("x", "4").toInt
kmbjn2e3

kmbjn2e33#

同样的问题困扰着我,你还没来得及查看下面

Map("x" -> 2).getOrElse[Int](x, 4)

相关问题