[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: block-scope finalization
- From: Coda Highland <chighland@...>
- Date: Tue, 17 Nov 2015 07:29:12 -0800
On Tue, Nov 17, 2015 at 6:01 AM, Viacheslav Usov <firstname.lastname@example.org> wrote:
> On Mon, Nov 16, 2015 at 6:28 PM, Philipp Janda <email@example.com> wrote:
>> What about:
>> local t = transaction( function( a, b, c )
>> if c then c:destroy() end
>> if b then b:clear() end
>> if a then a:close() end
>> end )
>> local a = t( f() )
>> local b = t( a:foo() )
>> local c = t( b:bar() )
>> -- do something with a, b, c
>> -- ...
>> t:commit() -- or t:rollback(), or t:cleanup()
>> No locals declared before initialization, and you could provide a default
>> rollback function that invokes `__gc` metamethods on all stored values
>> (although I find that rather ugly and unsafe).
> I do not think I understand how that will work. I understand that the
> transaction thing, when initialized, gets a finalizer, which is a function
> of some arguments, and those arguments will be finalized. But how do you
> specify which argument is which?
It looks like transaction() would return some sort of curried function.