Because of its reflexive facilities, persistence in Lua can be achieved within the language. This section shows some ways to store and retrieve values in Lua, using a text file written in the language itself as the storage media.
To store a single value with a name,
the following code is enough:
function store (name, value)
write(format('\n%s =', name))
write_value(value)
end
function write_value (value)
local t = type(value)
if t == 'nil' then write('nil')
elseif t == 'number' then write(value)
elseif t == 'string' then write(value, 'q')
end
end
In order to restore this value, a lua_dofile
suffices.
Storing tables is a little more complex.
Assuming that the table is a tree,
and all indices are identifiers
(that is, the tables are being used as records),
its value can be written directly with table constructors.
First, the function write_value
is changed to
function write_value (value)
local t = type(value)
if t == 'nil' then write('nil')
elseif t == 'number' then write(value)
elseif t == 'string' then write(value, 'q')
elseif t == 'table' then write_record(value)
end
end
The function write_record
is:
function write_record(t)
local i, v = next(t, nil)
write('{') -- starts constructor
while i do
store(i, v)
write(', ')
i, v = next(t, i)
end
write('}') -- closes constructor
end