8

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

top10Tweets 的签名,

def top10Tweets(tweets: String, retweet_c: Int, mention_c: Int) = {
}
4

3 回答 3

7

编辑

好的,使用新信息,我建议您创建一个包含数据的案例类而不是使用 a Map,这样您将保留类型信息。我知道在动态类型语言中使用哈希/映射是很常见的,但在静态类型语言中,因为 scala 数据类型是首选方式。

原件

由于我不知道是什么e,也不知道签名top10Tweets有什么,我只能假设。但是根据您的代码和错误,我假设它e是 aMap[String, String]并且您正在尝试获取键的整数的字符串表示形式"retweets"并将其转换为Int. 作为默认值传入 an Int,因此类型推断器推断 type ,因为这是andAny最常见的超类型。但是没有方法,因此您会收到错误消息。StringIntAnytoInt

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)

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

于 2013-07-16T10:35:07.337 回答
2

是的,因为在 Map 中是“字符串”->“字符串”,而您在 getOrElse ( else ) 字符串-> int 时做到了,这就是它的任何原因。

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

工作正常,或者您可以:

Map("x" -> "2").getOrElse("x", "4").toInt
于 2013-07-16T10:42:19.290 回答
0

在您查看以下内容之前,同样的问题困扰着我

Map("x" -> 2).getOrElse[Int](x, 4)
于 2018-12-21T07:51:49.757 回答