您的代码编译并运行得很好(注意:我使用的是 Scala 2.9.0.1。您可能想提及您正在使用的 Scala 版本。)
然而你的map
应用时的功能Map
s 总是返回 aList
即使返回一个有意义Map
本身。你可以通过改变来避免这种情况CC[_]
to CC
。 (相关博文:Scala 中的通用快速排序.)
def map[A, B, CC <: Traversable[A], That]
(xs: CC)(f: A => B)
(implicit cbf: CanBuildFrom[CC, B, That]): That = {
val b = cbf(xs)
for (a <- xs)
b += f(a)
b.result
}
但是在调用这个函数时你需要显式地对其进行类型注释,这有点令人难过。
val xs = Map(45 -> 32, 11 -> 9)
map[(Int, Int), (Int, Int), Map[Int, Int], Map[Int, Int]](Map(45 -> 32, 11 -> 9))(identity)
// gives Map(45 -> 32, 11 -> 9)
一定有某种方法可以避免这种丑陋的类型注释,但我不知道。