Почему неизменяемые методы Scala HashMap возвращают карту? - PullRequest
4 голосов
/ 12 апреля 2010

У меня проблемы с использованием метода обновления scala.collection.immutable.HashMap. Я не вижу причины, по которой он возвращает карту вместо HashMap. Как получить новый HashMap с добавленной новой парой ключ-значение?

Ответы [ 3 ]

7 голосов
/ 12 апреля 2010

Если вы используете 2.7, это потому, что со временем библиотека коллекций стала несовместимой с различными классами реализации, не специализирующимися на типах возвращаемых данных некоторых методов. Это одна из вещей, которая исправлена ​​в редизайне библиотеки коллекций для 2.8.

Если вы используете 2.8, это потому, что метод update устарел, и вы должны вместо него использовать updated. Это правильно специализирует возвращаемое значение.

scala> HashMap(1->1, 2->2, 3->3, 4->4).updated(1,3)
res4: scala.collection.immutable.HashMap[Int,Int] = Map((2,2), (4,4), (1,3), (3,3))
7 голосов
/ 12 апреля 2010

Это ожидаемое поведение. HashMap наиболее полезен в качестве конкретной реализации Map, включающей использование хеш-таблицы для поиска.

Обычно, вы говорите var values: Map[String, Any] = new HashMap, а затем бездельничаете и используете его, как будто это обычный неизменный Map.

Есть ли у вашего кода причина знать, что это HashMap после того, как вы new сделали это, как указано выше?

2 голосов
/ 12 апреля 2010

В 2.7.x он возвращает Map, потому что это может быть ListMap или TreeMap или что-то еще, и считалось, что это слишком много работы для переопределения методов каждый раз.

В 2.8.x должно возвращаться HashMap - но вы должны использовать updated (update устарело).

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