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

編集

わかりました、新しい情報を使用して、 を使用する代わりにデータを保持するケース クラスを作成することをお勧めします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

デフォルト値を として渡すか、存在する場合は値をbefore にString変換します。"retweets"Int

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

とにかく、もう少し情報があれば、正確な答えを得るのに役立ちます。

于 2013-07-16T10:35:07.337 に答える