想象一下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
。
答案 0 :(得分:1)
select
和collect
块对我来说就像条件标准一样。所以也许你可以命名类ConditionalCollection
,暗示集合会根据正在应用的条件而改变。
我刚才有了另一个想法:FilteredCollection
。
答案 1 :(得分:1)
我们最终决定使用DerivedCollection
。鉴于这些对象代表从其他来源获得的集合,就像意图而不是扩展所定义的数学集一样,我们选择了一个不透露其名称的名称内部代表。
BTW,DerivedCollection
对于过滤(#select:
)和转换(#collect:
)我们使用StoredArray
实例表示的大量数据特别有用将其元素存储在磁盘上的Array
。