如何创建新的Scala Map类?

时间:2016-02-08 11:44:45

标签: scala scala-collections

在Scala中,我想创建一个名为Map的通用新MyClass类。在这个类中,我想保持类型的通用性,并仅修改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必须与“经典”Map类相同。

1 个答案:

答案 0 :(得分:1)

正如其他人在评论中指出的那样,你应该先尝试一下,然后再遇到一些具体的问题。这是你如何开始,因为你想要实现Map trait:

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]]) = ???

}

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