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 ?
 :)



Reply via email to