Реализация собственной SortedMap в Scala - PullRequest
1 голос
/ 14 февраля 2012

Почему-то я не могу правильно реализовать SortedMap. Вот минимальный (не) рабочий пример:

class MyMap[A](t: Map[Long, A]) extends SortedMap[Long, A]  {
  protected val internalMap = TreeMap(t.toArray: _*)

  def -(key: Long) = MyMap(internalMap - key)
  def get(key: Long) = internalMap.get(key)
  def rangeImpl(from: Option[Long], until: Option[Long]) = TreeMap(internalMap.rangeImpl(from, until))
  def iterator = internalMap.iterator
  def ordering = internalMap.ordering
}

Но все, что я передаю в конструктор MyMap, вызывая, например, его size, всегда возвращает 0.


Приложение: Я просто скопировал код в новый проект, и он работал SortedMap

1 Ответ

3 голосов
/ 14 февраля 2012

После добавления нескольких отсутствующих методов для компиляции ваш код работал нормально:

class MyMap[A](t: Map[Long, A]) extends SortedMap[Long, A]  {
  protected val internalMap = TreeMap(t.toArray: _*)
  def +[B1 >: A](kv: (Long, B1)) = new MyMap(internalMap + kv)
  def -(key: Long) = new MyMap(internalMap - key)
  def get(key: Long) = internalMap.get(key)
  def rangeImpl(from: Option[Long], until: Option[Long]) = internalMap.rangeImpl(from, until)
  def iterator = internalMap.iterator
  def ordering = internalMap.ordering
}

Из отчета:

scala> t
res5: Map[Long,String] = Map(123 -> abc, 456 -> def)

scala> new MyMap(t)
res6: MyMap[String] = Map(123 -> abc, 456 -> def)

scala> res6.size
res7: Int = 2

Я что-то упустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...