[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua 5.1 upvalues
- From: Rob Hoelz <rob@...>
- Date: Fri, 8 Apr 2011 16:19:02 -0500
They don't really conflict at all. You're storing a reference to a
table; i.e. a memory address. If you share that address between two
closures, they can both change the contents stored at that address.
If you store a number in that upvalue instead, altering it in one
closure wouldn't affect the upvalue of the other. It's kind of like
the difference between passing an int to a C function versus passing
a pointer to a struct to a C function.
-Rob
On Fri, 08 Apr 2011 23:04:36 +0200
Anthony Howe <achowe+lua@snert.com> wrote:
> On 08/04/2011 21:16, Rob Hoelz whispered from the shadows...:
> > If you want C closures to share values, you could store a table as
> > an upvalue, store your values in there, and set the same table as an
> > upvalue for the closures.
>
> Ugh. One person says no. Another suggests the very thing I want to try
> that prompted the question.
>
> In 5.1 does...
>
> lua_newtable(L);
> lua_pushvalue(L, -1);
> lua_pushcclosure(L, &foobar, 1);
> lua_pushcclosure(L, &barblat, 1);
>
> -- rinse & repeat
>
> Work? Can more than one C function share a single upvalue? I ask
> because something along these lines has been mentioned in Lua 5.2 as
> an alternative to environments or some such without any examples. So
> I'm unclear as to whether this is possible in 5.1 and/or 5.2.
>
> So far I have conflicting answers.
>
> >
> > -Rob
> >
> > On Fri, 8 Apr 2011 15:05:31 -0400
> > Patrick Donnelly <batrick@batbytes.com> wrote:
> >
> >> On Fri, Apr 8, 2011 at 1:46 PM, Anthony Howe <achowe+lua@snert.com>
> >> wrote:
> >>> Can Lua 5.1 upvalues be associated with more than one C closure?
> >>
> >> No.
> >>
> >
>
Attachment:
signature.asc
Description: PGP signature