lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Ah correct you are. I wrote that a bit too quickly perhaps. But yeah, simply moving them outside the functionfactory scope is enough to fix it.

On Mon, Jun 21, 2010 at 10:35 PM, Henk Boom <henk@henk.ca> wrote:
On 21 June 2010 08:48, Kristofer Karlsson <kristofer.karlsson@gmail.com> wrote:
> function functionfactory()
>    local upvalue1, upvalue2
>    return function()
>        return upvalue1 + upvalue2
>    end
> end
>
> local clone1 = setfenv(functionfactory(), env1)
> local clone2 = setfenv(functionfactory(), env2)
>
> clone1 and clone2 now shares prototype and upvalues, but have different
> environments

Actually, each of the returned functions have their own upvalues, they
aren't shared. If you lifted "local upvalue1, upvalue2" out of
functionfactory, then they would be shared.

   henk