Dynamic variable names in Lua
When scripting it’s often necessary to get the name of a variable from the data file in order to set it. The Lua manual suggests using the construct
value = _G[varname]
This doesn’t work when the variable name is part of a table, i.e. for example:
value = _G[data] works, but
value = _G[data.fish.size] just returns nil because it’s trying to use “data.fish.size” as a table key in the global table
In order to address the problem, the manual provides an example function getfield which doesn’t work. What does work is adapting the code for setfield, as follows:
function getfield (f)
local t = _G — start with the table of globals
local v = nil
for w, d in string.gfind(f, “([%w_]+)(.?)”) do
if d == “.” then — not last field?
t[w] = t[w] or {} — create table if absent
t = t[w] — get the table
else — last field
v = t[w] — do the assignment
end
end
return v;
end
(this stems from looking at the load/save issues Corona has even with the examples provided on the web which failed to work for me)
- bluetriangle