Как правильно загружать файлы в сценарии с помощью luabind?

Я пытаюсь внедрить Lua в игру. Что я хочу сделать, так это создать функцию загрузки, которая будет загружать все файлы в папку, а затем создавать объекты на основе этих файлов, которые будут храниться на стороне С++. Однако, если я использую что-то вроде dofile, он загрязняет все переменными, которые находятся в этом файле. Как изменить этот импорт на локальный?


person user975989    schedule 17.02.2013    source источник


Ответы (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
comment
Это хороший код Lua, но я предполагаю, что ему нужен эквивалент C++. - person Nicol Bolas; 18.02.2013
comment
Большое спасибо, это именно то, что мне было нужно. - person user975989; 18.02.2013