[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- 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 <via.usov@gmail.com> wrote:
> On Mon, Nov 16, 2015 at 6:28 PM, Philipp Janda <siffiejoe@gmx.net> 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?
>
> Cheers,
> V.
It looks like transaction() would return some sort of curried function.
/s/ Adam