Я пытаюсь внедрить Lua в игру. Что я хочу сделать, так это создать функцию загрузки, которая будет загружать все файлы в папку, а затем создавать объекты на основе этих файлов, которые будут храниться на стороне С++. Однако, если я использую что-то вроде dofile, он загрязняет все переменными, которые находятся в этом файле. Как изменить этот импорт на локальный?
Как правильно загружать файлы в сценарии с помощью luabind?
Ответы (1)
Вы можете использовать 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.
person
Paul Kulchenko
schedule
18.02.2013
Это хороший код Lua, но я предполагаю, что ему нужен эквивалент C++.
- person Nicol Bolas; 18.02.2013
Большое спасибо, это именно то, что мне было нужно.
- person user975989; 18.02.2013