如何创建新的 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]]) = ???
}
但是,在那种情况下,编译器会警告您,由于实现细节,从现有实现继承是不明智的。
在 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]]) = ???
}
但是,在那种情况下,编译器会警告您,由于实现细节,从现有实现继承是不明智的。