Как реализовать коллекцию в Scala 2.8?
При попытке написать API я борюсь с коллекциями Scala в 2.8 (.0-beta1).
В основном мне нужно написать что-то, что:
- добавляет функциональность к неизменяемым наборам определенного типа
- где все методы, такие как фильтр и карта, возвращают коллекцию того же типа без необходимости переопределять все (именно поэтому я пошел на 2.8 в первую очередь).
- где все коллекции, полученные вами по этим методам, строятся с теми же параметрами, что и у исходной коллекции (подобно тому, как SortedSet обрабатывает заказы через implicits).
- который по-прежнему является чертой сам по себе, независимо от любых реализаций набора.
Кроме того, я хочу определить реализацию по умолчанию, например, на основе HashSet. Сопутствующий объект признака может использовать эту реализацию по умолчанию. Я еще не уверен, если мне понадобится полная мощность заводов-застройщиков для сопоставления моего типа коллекции с другими типами коллекций.
Я прочитал документ о пересмотре API коллекций, но похоже, что с тех пор ситуация немного изменилась, и я пропал без вести некоторые детали там. Я также выкопал исходный код коллекции, но я не уверен, что он очень последователен.
В идеале то, что я хотел бы увидеть, - это либо практический учебник, который рассказывает мне шаг за шагом только то, что мне нужно, или подробное описание всех деталей, чтобы я мог судить о том, какие бит мне нужны. Мне понравилась глава о равенстве объектов в "Программирование в Scala".:-)
Но я ценю любые указатели на документацию или примеры, которые помогают мне лучше понять дизайн новых коллекций.
Ответы
Ответ 1
Я бы посмотрел на реализацию collection.immutable.BitSet. Это немного разбросано, повторное использование вещей из коллекции .BitSetLike и collection.generic.BitSetFactory. Но он делает именно то, что вы указали: реализовать неизменяемый набор определенного типа элемента, который добавляет новые функции.