Вы можете сделать это одним из нескольких способов. Например:
local myInternalLocal = nil
function FuncName(...)
if(not myInternalLocal) then
myInternalLocal = --Do stuff that builds the table.
end
return myInternalLocal
end
В качестве альтернативы вы можете сделать это заменой, которая лучше скрывает внутреннюю переменную и (очень немного) быстрее:
function FuncName(...)
local myInternalLocal = --Do stuff that builds the table.
FuncName = function()
return myInternalLocal
end
end
Недостаток здесь связан с модулями. Если это внутри модуля, то вам может потребоваться изменить способ повторного связывания функции. И, конечно, если кто-то сохранит старую функцию перед вызовом, он может продолжать вызывать оригинальную версию.