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)
编辑:
好的,有了新的信息,我建议你创建一个保存数据而不是使用a的case类,Map这样你就可以保留类型信息.我知道在动态类型语言中使用散列/映射很常见,但在静态类型语言中,scala数据类型是首选方式.
来源:
因为我既不知道是什么e,也不知道签名是什么top10Tweets,我只能假设.但是从你的代码和错误我认为e是一个Map[String, String],你正在尝试获取键的整数的字符串表示形式,"retweets"并将其转换为Int.作为默认值传入Int,因此类型推断器推断类型Any,因为这是最常见的超类型String和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
Run Code Online (Sandbox Code Playgroud)
无论是传递默认值String,或者转换的值"retweets"到Int之前,如果存在的话:
e.get("retweets").map(_.toInt).getOrElse(0)
Run Code Online (Sandbox Code Playgroud)
无论如何,更多的信息将有助于给出准确的答案.
| 归档时间: |
|
| 查看次数: |
14356 次 |
| 最近记录: |