scala 值 toInt 不是 Any 的成员

标签 scala types casting option

以下代码中的 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有,我只能假设。但是根据您的代码和错误,我假设 eMap[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/

相关文章:

scala - 理解 Scala FP 库

macos - Mac OS Intellij 运行 scala 程序时出错

c# - c#中的整数数学

C: 分配给 char... 期待类型转换?

scala - 如何在单个查询中为不同类型的列计算流数据帧的统计信息?

c - 为什么微软将类型CHAR定义为char,将宏CONST定义为const?

MySQL插入无效日期

java - 如何在 Android 程序的 Eclipse 中将变量声明为 OpenGL 的 GLuint 类型?

java - 将父类(super class)类型转换为子类类型?

mysql - 读取端延迟和响应能力