Benji York wrote: > Stuart Bishop wrote: > >> If this is a way of saying "I'm iterable, but I don't want to tell you >> how >> long I am" > > > Right. > >> shouldn't an exeption be raised? Otherwise 'for i in >> range(0,len(source)): >> foo = source[i]' could start blowing up if the source changes. > > > Of course, that particular spelling would be a strange way to iterate > over the values, and a source from a non-ZODB back-end really should > provide the C in ACID, but point taken. :) > > That is the way vocabularies do it, something else might work better. > Now would be the time to talk about it.
Urgh... I hadn't noticed that in vocabularies before. I believe this has other side effects too, such as if I do list(mysource), Python calls mysource.__len__ (if it exists) to preallocate the list size. Wierd things can happen if your class lies about itself and breaks contracts. Do you happen to know *why* the vocabularies needed this method, and if the callsites could be fixed to catch a NotImplementedError or similar? -- Stuart Bishop <[EMAIL PROTECTED]> http://www.stuartbishop.net/
Description: OpenPGP digital signature
_______________________________________________ Zope3-dev mailing list Zope3email@example.com Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com