我在使用Scala的SortedMap [A,B]时遇到了一些未经授权的陌生感.如果我将SortedMap [A,B]"a"的引用声明为Map [A,B]类型,那么对"a"的映射操作将产生一个非有序映射实现.
例:
import scala.collection.immutable._
object Test extends App {
val a: Map[String, String] = SortedMap[String, String]("a" -> "s", "b" -> "t", "c" -> "u", "d" -> "v", "e" -> "w", "f" -> "x")
println(a.getClass+": "+a)
val b = a map {x => x} // identity
println(b.getClass+": "+b)
}
Run Code Online (Sandbox Code Playgroud)
以上的输出是:
class scala.collection.immutable.TreeMap:Map(a - > s,b - > t,c - > u,d - > v,e - > w,f - > x)
class scala.collection.immutable.HashMap $ HashTrieMap:Map(e - > w,f - …
collections functional-programming scala sortedmap higher-order-functions
Daniel Sobral展示了我们如何创建一个返回相同集合类型的方法,在这个问题的答案中调用它:在泛型方法中返回原始集合类型
是否可以对使用映射返回相同集合类型的不同参数化版本的方法执行相同操作?
例如
def foo[A](xs: GenTraversable[A]) = xs map (_.toString)
Run Code Online (Sandbox Code Playgroud)
foo( List(1, 2, 3) ) 回报 res: GenTraversable[String] = List(1, 2, 3)
可以这样调整吗?
foo( Set(1, 2, 3) ) 返回一个 Set[String]
foo( List(1, 2, 3) ) 返回一个 List[String]
foo( Vector(1, 2, 3) ) 返回一个 Vector[String]