Как реализовать коллекцию в Scala 2.8? - PullRequest
13 голосов
/ 29 марта 2010

Пытаясь написать API, я борюсь с коллекциями Scala в 2.8 (.0-beta1).

В основном мне нужно написать что-то, что:

  • добавляет функциональность неизменяемым наборам определенного типа
  • где все методы, такие как filter и map, возвращают коллекцию одного и того же типа без необходимости переопределять все (именно поэтому я остановился на 2.8)
  • где все коллекции, которые вы получаете с помощью этих методов, построены с теми же параметрами, что и у исходной коллекции (аналогично тому, как SortedSet выполняет упорядочение с помощью имплицитов)
  • , который по-прежнему является чертой сам по себе, независимо от каких-либо реализаций набора.

Кроме того, я хочу определить реализацию по умолчанию, например, на основе HashSet. Сопутствующий объект черты может использовать эту реализацию по умолчанию. Я еще не уверен, нужна ли мне вся мощь заводов-строителей для сопоставления моего типа коллекции с другими типами коллекции.

Я прочитал статью о редизайне API коллекций , но с тех пор кажется, что все немного изменилось, и я упускаю некоторые детали там. Я также просмотрел исходный код коллекций, но пока не уверен, что он очень последовательный.

В идеале я бы хотел увидеть практическое руководство, которое шаг за шагом рассказывает мне только нужные мне биты, или подробное описание всех деталей, чтобы я мог сам судить, какие биты мне нужны. Мне понравилась глава о равенстве объектов в "Программирование в Scala". : -)
Но я ценю любые ссылки на документацию или примеры, которые помогают мне лучше понять дизайн новых коллекций.

1 Ответ

17 голосов
/ 29 марта 2010

Я бы посмотрел на реализацию collection.immutable.BitSet. Это немного распространено, повторное использование вещей из collection.BitSetLike и collection.generic.BitSetFactory. Но он делает именно то, что вы указали: реализовать неизменный набор определенного типа элемента, который добавляет новые функциональные возможности.

...