I juts had occasion to use generators in anger for the first time. I was trying to fnd out why a clone of a prse tree was reporting that it was not the same tree. Generators made enumerating all nodes in each tree together trivial:
| them |
them := Generator on: [:g| newTree nodesDo: [:n| g yield: n]].
parseTree nodesDo:
[:n| | twin |
twin := them next.
(n isSameAs: twin) ifFalse:
[self halt]]
My message though comes from noticing that generators yield their values via next, so why not use nextPut: instead of yield: ?
e.g. I think this is better:
| them |
them := Generator on: [:g| newTree nodesDo: [:n| g nextPut: n]].
parseTree nodesDo:
[:n| | twin |
twin := them next.
(n isSameAs: twin) ifFalse:
[self halt]]