如果你看一看倍的签名,你可以看到
links.fold(Map.empty[String, Int]) ((count : Int, word : String) => ???)
不会编译
上List[A]
倍的类型为fold[A1 >: A](z: A1)(op: (A1, A1) ⇒ A1): A1
这是不是你可以使用; Map.empty[String, Int]
不是String
一个亚型,你需要的是foldLeft
:foldLeft[B](z: B)(op: (B, A) ⇒ B): B
你A
是String
。您的B
为Map[String, Int]
,但在您的第二个参数列表中有(Int, String) => ???
这不符合签名。它应该是(Map[String, Int], String) => Map[String, Int]
溶液直接提出了自己:
(map: Map[String, Int], next : String) => map + (next, map.get(next).getOrElse(0) + 1)
全部放在一起,你就会有
links.foldLeft(Map.empty[String, Int])
((map: Map[String, Int], next : String) => map + (next, map.get(next).getOrElse(0) + 1))
@Martjin代码“links.fold(Map.empty [字符串,INT]) (地图:地图[字符串,INT],下一:String)=> map +(next,map.get(next))。getOrElse(0)+ 1)“会导致编译时错误”traitableOnce中缺少方法折叠的参数;如果您想将其视为部分应用的功能,请使用'_'执行此操作。“ – thepen
您忘记在最后一行用'foldLeft'代替'fold'。 –