I'm sorry, that was a doofus comment. Of course lambdas allow side- effects! I wish mailing lists supported "delete."
On Aug 27, 1:08 pm, Michael Toomim <too...@gmail.com> wrote: > Interesting approach to use lambdas. Since lambdas don't do side- > effects, I checked out my virtualfields to see if my uses have side > effects. > > In my app I have: > 12 methods total across 3 database tables > 10 of those methods have no side-effects > 2 have side-effects > > The two methods with side-effects are: > 1. row.delete() ... deletes the relevant rows in related tables > 2. row.toggle_x() ... toggles the boolean field of x and updates > cached data on other tables and sends email notifications > > Perhaps this information is useful in designing the next lazy > virtualfields. > > On Aug 25, 9:14 pm, Massimo Di Pierro <massimo.dipie...@gmail.com> > wrote: > > > > > > > > > We are moving away from this because of many problems. Try this > > instead. It is still experimental but may go into stable soon. > > > def vfields(): > > db.define_table('item', > > Field('unit_price','double'), > > Field('quantity','integer')) > > db(db.item.id>0).delete() > > > db.item.lazy_total_price=Field.lazy(lambda > > self:self.item.unit_price*self.item.quantity) > > > db.item.bulk_insert([{'unit_price':12.00, 'quantity': 15}, > > {'unit_price':10.00, 'quantity': 99}, > > {'unit_price':120.00, 'quantity': 2},]) > > res = [] > > for r in db(db.item.id>0).select(): > > res.append([r.unit_price, r.quantity, r.lazy_total_price()]) > > return dict(res=res) > > > On Aug 25, 7:50 am, Martin Weissenboeck <mweis...@gmail.com> wrote: > > > > I wanted to learn more about lazy virtual fields and therefore I have > > > repeated the example from the book: > > > > def vfields(): > > > db.define_table('item', > > > Field('unit_price','double'), > > > Field('quantity','integer')) > > > > db(db.item.id>0).delete() > > > > class MyVirtualFields: > > > def lazy_total_price(self): > > > return lambda self=self: self.item.unit_price*self.item.quantity > > > > db.item.virtualfields.append (MyVirtualFields()) > > > > db.item.bulk_insert([{'unit_price':12.00, 'quantity': 15}, > > > {'unit_price':10.00, 'quantity': 99}, > > > {'unit_price':120.00, 'quantity': 2},]) > > > > res = [] > > > for r in db(db.item.id>0).select(): > > > res.append([r.unit_price, r.quantity, r.lazy_total_price()]) > > > return dict(res=res) > > > > The expected output is: > > > [[12.0, 15, 180.0], [10.0, 99, 990.0], [120.0, 2, 240.0]] > > > > But I got > > > * [[12.0, 15, *240.0]*, [10.0, 99, *240.0*], [120.0, 2, 240.0]]* > > > * > > > * > > > *Three times the same result. > > > * > > > I have read the book and my program over and over again - but I cannot see > > > any error.* > > > * > > > > Does somebody have an idea? > > > Martin