scala中的foldLeft方法

时间:2016-08-29 07:20:22

标签: scala

我使用以下代码来获取文本中的单词数

.foldLeft(Map.empty[String, Float]){
   (countsSource, wordSource) => countsSource + (wordSource -> (countsSource.getOrElse(wordSource, 0) + 1))}

我收到的错误是1应该是一个字符串。如果我把它放在引号中,它说它应该是一个浮点数。

我做错了什么?感谢您的帮助

1 个答案:

答案 0 :(得分:1)

getOrElse的签名如下:

def getOrElse[B1 >: B](key: A, default: => B1): B1

这意味着它不一定返回Map的值类型(B),但可能返回超类B1。在您的情况下,使用文字0不会通知编译器您对Float感兴趣。

使用0f代替修复它:

l.foldLeft(Map.empty[String, Float]){
  (countsSource, wordSource) => countsSource + (wordSource -> (countsSource.getOrElse(wordSource, 0f) + 1))}
相关问题