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('\n' .. 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 .. ']]')
  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 .. '"')
  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