Я пытаюсь встроить Луа в игру. Я хочу создать функцию загрузки, которая будет загружать все файлы в папке, а затем создавать объекты на основе тех файлов, которые будут храниться на стороне C ++. Однако, если я использую что-то вроде dofile, это загрязняет все переменными, которые находятся в этом файле. Как изменить этот импорт на локальный?
Ты можешь использовать loadfile
чтобы получить функцию на основе содержимого файла, затем setfenv(fn,{})
установить среду, а затем вызвать эту функцию (вероятно, в pcall
):
local fn, err = loadfile("myfile")
if fn then
setfenv(fn,{})
local ok, err = pcall(fn)
if not ok then error(err) end
else
error(err)
end
Вы также можете заполнить таблицу, которую вы передаете setfenv
со значениями вам нужен скрипт, чтобы иметь доступ или предоставлять доступ к глобальной среде с помощью чего-то вроде:
local env = {}
setmetatable(env,{__index = _G})
setfenv(fn,env)
Это все для Lua 5.1.
Других решений пока нет …