В Lua нельзя просто передавать переменные по ссылке или нет. Базовые типы никогда не передаются по ссылке (например, числа и логические значения), другие всегда передаются по ссылке (например, таблицы, пользовательские данные и строки). В случае строк это не имеет большого значения, потому что они в любом случае неизменны.
То есть вы передаете свои аргументы, над которыми хотите работать глобально, в виде строк, подобных этой:
a=2
b=3
function myfunc(...)
local args={...}
for k,v in pairs(args) do
_G[v]=_G[v]+k
end
end
myfunc('a')
print(a) -- 3
myfunc('a','b')
print(a,b) -- 4 5
Обратите внимание, что это работает только для глобалов, поскольку локальные данные не хранятся в таблице.
Работа с таблицами делает такие вещи менее болезненными:
function myfunc(t)
for k,v in pairs(t) do
t[k]=v+k
end
end
tab1={a=2}
myfunc(tab1)
print(tab1.a) -- 3
tab2={a=2,b=3}
myfunc(tab2)
print(tab2.a,tab2.b) -- 3 5