首页 > 解决方案 > 如何针对可变和不可变 Map 进行编程?

问题描述

我想写一个函数

def doSomething(m: Map[X, Y]): Z = ???

对于某些给定的类型X, Y, Z

该函数将对immutable.Map和执行相同的操作mutable.Map

有什么办法可以写吗?

标签: scala

解决方案


两者immutable.Mapmutable.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 中用于描述 Map 的通用接口。因此你的功能可能是def doSomething(m: scala.collection.Map[X, Y]): Z = ???

您仍然可以使用大多数 Map 接口函数,但是,那些未在 mutable 和 immutable 之间共享的函数将不存在。


推荐阅读