Загрузите скрипт Lua в таблицу с именем filename - PullRequest
2 голосов
/ 28 апреля 2010

Я загружаю скрипты, используя luaL_loadfile, а затем lua_pcall из моей игры, и мне было интересно, если бы вместо загрузки их в глобальную таблицу я мог загрузить их в таблицу, названную в честь их имени файла?

Например:

У меня есть файл под названием "Foo.lua", который содержит:

function DoSomething()
    --something
end

После загрузки я хочу иметь к нему доступ, например:

Foo.DoSomething()

Спасибо!

Ответы [ 2 ]

6 голосов
/ 28 апреля 2010

Попробуйте что-нибудь подобное. Не забудьте добавить проверку ошибок ...

lua_newtable(L);
lua_setglobal(L,filename);
luaL_loadfile(L,filename);
lua_getglobal(L,filename);
lua_setfenv(L,-2);
lua_pcall(L,...);
4 голосов
/ 28 апреля 2010

Куда они идут, определяется самим кодом Lua - если файл объявляет его в глобальном пространстве имен, он переходит в глобальное пространство имен при запуске файла через pcall.

Самым простым вариантом было бы побудить любого, кто пишет файлы Lua, создавать свои собственные пространства имен (просто Foo = {} в начале файла, а затем объявить функции как Foo.whwhat).

Если вы хотите заставить вещи в частном пространстве имен, вам придется немного усложнить вещи - в основном, найти то, что изменилось в глобальном пространстве имен после запуска файла, и вручную переместить новые элементы вместо этого в личное пространство имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...