Я хочу создать структуру данных Counter[A]
(вдохновленный Python Counter), который расширяет Map[A, Int]
, что просто содержит количество вхождений элементов типа A
. Я хочу, чтобы у него было 2 дополнительных метода: add(item: A)
и remove(item: A)
, которые увеличивают/уменьшают счетчик, связанный с item
, и, конечно же, я также хочу, чтобы все хорошие методы сбора Scala, такие как map
, filter
и т. Д., Поэтому я, вероятно, должен расширять Map[A, Int]
. Но я смущен в отношении того, каков минимальный набор методов, я должен переопределить/реализовать из Map
для других методов сбора Scala.Какие методы Scala Map переопределить
1
A
ответ
4
Рассмотрите возможность замены наследования делегированием. Другими словами, ваш класс может распространяться на Map[A, Int]
, но должен содержать частный член Map[A, Int]
. Все вызовы вашего класса просто делегируют одни и те же вызовы участнику.
Вот частичная реализация моих предложений:
class MyClass[A, Int] extends collection.immutable.Map[A, Int] {
private val map = collection.immutable.Map.empty[A, Int]
def get(key: A): Option[Int] = {
map.get(key)
}
def iterator: Iterator[(A, Int)] = {
map.iterator
}
def -(key: A): Map[A, Int] = {
map - key
}
def +[B1 >: Int](kv: (A, B1)): Map[A, B1] = {
map + kv
}
}
1
Вы должны смотрите на это: http://docs.scala-lang.org/overviews/core/architecture-of-scala-collections.html Это объясняет с деталями процессом создания новых коллекций в Скале. Если вы не хотите читать целую статью, вы можете перейти непосредственно в раздел «Интеграция новых наборов и карт», который на примере показывает, как построить новый вид карты - именно то, что вы хотите сделать.
Смежные вопросы
- 1. Как переопределить методы в признаке Scala?
- 2. Какие методы генерируются для классов классов Scala?
- 3. Как переопределить Map
- 4. Как узнать, какие методы переопределить при написании объекта Objective-C?
- 5. Scala map companion
- 6. Переопределить методы реализации в среде Scala IDE не работает
- 7. Переопределить методы строки java
- 8. Переопределить методы плагина jQuery
- 9. Spree - Переопределить методы checkout_controller
- 10. Как переопределить методы класса
- 11. Методы переопределения атрибутов в scala
- 12. classTag scala using map
- 13. scala map/type экземпляры
- 14. Scala inested map merge
- 15. Scala Map [String, MutableList]()
- 16. Scala Circular Map
- 17. Scala disk based Map
- 18. Scala map method синтаксис
- 19. Scala Map Parser
- 20. Scala Map vs HashMap
- 21. Scala/Lift - map function
- 22. Новичок: Scala map
- 23. Различные типы в Map Scala
- 24. Функция 'map' для Scala кортежей?
- 25. Scala: Математические функции не методы
- 26. Convert scala map to java map
- 27. scala map collect эквивалент groovy map collect
- 28. Какие методы блокируются в Javascript?
- 29. Scala Array map возвращает ArraySeq
- 30. Какие методы вызовут NSInvalidArgumentException?
Но тогда мне пришлось бы делегировать все 100 или около того методов в Карте? Я хочу переопределить самый маленький набор методов ... – pathikrit
№ Класс, который я изложил выше, представляет собой минимум, который вы должны реализовать. Таким образом, еще один класс теперь может сказать «val map = new MyMap [Int, Int]». Поскольку, например, 'filter' является конкретным методом в признаке« Карта », вам не нужно его реализовывать. Но вызов его может смутить клиентов своим поведением. Таким образом, вы могли бы использовать свою среду IDE для реализации всего с помощью 'super', иначе вы могли бы не расширять ваш класс« Map ». Надеюсь, что другие будут перекликаться с другими лучшими решениями, поскольку я тоже все еще изучаю Scala. – Vidya
Я только что внедрил его здесь: https://github.com/pathikrit/scalgos/commit/597baeb406d92c179e919faff3c3fe1d8141193e – pathikrit