Dynamic variable names in Lua

Kestrel Games
1 min readMar 15, 2020

--

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

--

--

Kestrel Games
0 Followers

Indie devs working on a procedurally generated biome simulation space harvesting game! www.kestrelgames.com