This is like the Iterator Design pattern and this is interesting.
Why don't you give a try to see how it grows?
Thanks Alain
May be this "memory" could be implemented in another object (and/or
Traits?) , allowing several threads to traverse the collection, and
add extensibility to the collection framework.
The general idea, inspired from dotnet+smalltalk
(I don't know if this fit well with smalltalk patterns, may be total
junk and not doable ? -btw it's just a proposition)
Collection>> asQueryable
"=> a Queryable Object that would implement first, next, based on a
predicate."
^Queryable on: self readStream.
Queryable class >> on: aStream
^self new on: aStream
Queryable>> where: aPredicateBlock
self predicate: aPredicateBlock
Queryable>> first
self stream reset .
^self next.
Queryable>>next
[self stream atEnd not
and: [ (self predicate value: (current := self stream next)))]
whileFalse.
^ self stream atEnd ifTrue: [nil]
ifFalse: [self current].
(...)
col := #('a12' 'b12' 'a13' 'a14' 'c23' 'a16') asQueryable where:
[:each | each first = $a].
col first. -> 'a12'
col next. -> 'a13'
Those dotnet linq patterns are cool, on a dynamic langage like
smalltalk with
tools like GTInspector + roassal and Moose, wouldn't it be ultra cool ?
:)