如何创建新的 Scala Map class?

How create new Scala Map class?

在 Scala 中,我想创建一个名为 MyClass 的通用新 Map class。在这个 class 中,我想保持类型的通用性,只修改 Sequence 类型的方法 ++ 。 ++ 方法必须合并此映射中相同键的相等对象。

示例

val map1 = ("a"->Seq(1,2))
val map2 = ("a"->Seq(2,3))

结果必须是

map1++map2 = ("a"->Seq(1,2,3))

而不是

map1++map2 = ("a"->Seq(2,3))

对于所有其他类型 MyMap 必须与 "classic" 映射相同 class。

正如其他人在评论中指出的那样,您应该先尝试一些东西,然后在遇到特定问题时再回来。如果您想实现 Map 特征,那么您可以从这里开始:

class MyClass[A, +B] extends Map[A, B] {

  def get(key: A): Option[B] = ???
  def iterator: Iterator[(A, B)] = ???
  def +[B1 >: B](kv: scala.Tuple2[A, B1]): Map[A, B1] = ???
  def -(key: A): Map[A, B] = ???

  override def ++[B1 >: B](xs: scala.collection.GenTraversableOnce[scala.Tuple2[A, B1]]) = ???

}

您也可以从现有的 Map 实现开始,例如

class MyClass[A, +B] extends scala.collection.immutable.HashMap[A, B] {

  override def ++[B1 >: B](xs: scala.collection.GenTraversableOnce[scala.Tuple2[A, B1]]) = ???

}

但是,在那种情况下,编译器会警告您,由于实现细节,从现有实现继承是不明智的。