我想编写一个函数
def doSomething(m: Map[X, Y]): Z = ???
对于某些给定类型X, Y, Z
。
该函数将对immutable.Map
和mutable.Map
进行相同的操作。
有什么办法可以写吗?
答案 0 :(得分:1)
只需声明参数m
的类型为collection.Map[X, Y]
。
这是找出两种类型的最小上限的快速方法:
import collection._
def f(a: mutable.Map[Int, Int], b: immutable.Map[Int, Int]) = List(a, b).head
REPL告诉您返回类型为collection.Map[Int, Int]
。
答案 1 :(得分:1)
immutable.Map
和mutable.Map
都扩展了scala.collection.Map
。
package scala
package collection
trait Map[A, +B] extends Iterable[(A, B)] with GenMap[A, B] with MapLike[A, B, Map[A, B]] {
def empty: Map[A, B] = Map.empty
override def seq: Map[A, B] = this
}
从上方可以看到,这是Scala中用于描述地图的通用界面。因此您的功能可能是def doSomething(m: scala.collection.Map[X, Y]): Z = ???
您仍然可以使用大多数Map接口功能,但是,那些在可变和不可变之间不共享的功能将不存在。