lua-users home
lua-l archive

What happens when you try to serialize a closure

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


I just noticed this question on stackoverflow
(http://stackoverflow.com/questions/14509814)
The poster was trying to serialize a closure (using string.dump.)
This is their code sample:
> function ffactory(x) return function() return x end end
> f1 = ffactory(5)
> print(f1())
5 <-- so far so good
> s = string.dump(f1)
> f2 = load(s)
> print(f2())
table: 00000000002F7BA0 <-- expected the integer 5
> print(f2()==_ENV)
true <-- definitely didn't expect this!
I understand that f2 has no way to access the original upvalue (which is
why one should not pass a function with upvalues to string.dump.)
But still, I agree with the "definitely didn't expect this!" remark.
Shouldn't f2() return nil rather than _ENV?
Is this a bug?

AltStyle によって変換されたページ (->オリジナル) /