Представьте себе подкласс Collection, который знает блок select и блок collect. Экземпляр этого класса оборачивает другой collection и динамически применяет к нему эти блоки. Так, например, #do: реализован как
do: aBlock
collection
select: [:element | select value: element]
thenDo: [:element | | v |
v := collect value: element.
aBlock value: v]]
Итак, вопрос в том, как мне назвать этот класс? Я назвал его WrappedCollection, но это имя двусмысленно, и, кроме того, эта штука уже должна существовать и иметь имя.
Кстати, это очень похоже на Subclassing Stream, за исключением того, что у меня не Stream.
Ответ 1 · рейтинг 1 · Max Leske
Блоки select и collect звучат для меня как критерии состояния. Так что, возможно, вы могли бы назвать класс ConditionalCollection, подразумевая, что коллекция изменяется в ответ на применяемые условия.
И еще одна идея, которая у меня только что возникла: FilteredCollection.
Ответ 2 · рейтинг 1 · Leandro Caniglia
Наконец-то мы решили использовать DerivedCollection. Учитывая, что эти объекты представляют наборы, полученные из других источников, подобно тому как математические наборы могут быть определены намерением, а не расширением, мы выбрали имя, которое не раскрывает их внутреннее представление. .
Кстати, DerivedCollection особенно полезны для фильтрации (#select:) и преобразования (#collect:) больших объемов данных, которые мы представляем с помощью экземпляров StoredArray, разновидности Array, которая хранит свои элементы на диске.