[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: string.dump(closure)
- From: "Aaron Brown" <arundelo@...>
- Date: Tue, 8 Aug 2006 09:48:30 -0400
I just came across an undocumented feature of the Lua 5.1
string.dump. In Lua 5.0, string.dumping a function with
upvalues causes an error. In Lua 5.1 and 5.1.1, such a
function can be dumped, and it does have upvalues
(initialized to nil and not shared with any other
functions). (Example code is below.)
This is a handy if small subset of upvalue functionality,
but I was wondering why it's undocumented:
- It doesn't work in all situations?
- It was too complicated to explain in the manual?
- It's likely to change in the future (perhaps because of VM
changes)?
- It was overlooked when updating the manual?
Here's an example:
function DumpTest()
local Acc = 100
-- Increments and prints its upvalue:
local function Inc()
Acc = (Acc or 0) + 1
print(Acc)
end -- Inc
-- Decrements and prints its upvalue:
local function Dec()
Acc = (Acc or 0) - 1
print(Acc)
end -- Dec
local IncBc, DecBc = string.dump(Inc), string.dump(Dec)
local Inc2, Dec2 = loadstring(IncBc), loadstring(DecBc)
Inc() --> 101
Inc() --> 102
Dec() --> 101
Dec() --> 100
Inc() --> 101
Inc2() --> 1
Inc2() --> 2
Dec2() --> -1
Dec2() --> -2
Inc2() --> 3
end -- DumpTest
DumpTest()
Thanks,
--
Aaron