Введение в Lua



              

Стек LUA - часть 2


Далее, как объяснить lua, что такие функции существуют? И как объяснить, сколько параметров они требуют. Внимание, приготовьтесь. С помощью lua Вы можете послать сколько угодно параметров. Также, любая функция в lua может вернуть больше чем один результат. Это действительно так. Любая lua или доступная lua функция может вернуть множество значений. Это называется Кортеж [Tuple]. Это круто, но вначале немного смущает. Так, что насчет связывания lua и C/C++? Это не сложно. Конкретно, что мы должны сделать - зарегистрировать функцию в lua. Lua функция lua_register обеспечивает нас такими функциональными возможностями.
lua_register(L, n, f) где
L: lua_State, то где мы регистрируем функцию
N: символьное имя функции передающееся lua
F: склеивающая функция.

Интересно, что lua_register() не функция, а макрокоманда. Вот, что она из себя представляет:
(lua_pushcfunction(L, f), lua_setglobal(L, n))

lua_pushcfunction помещает C функцию в lua_State. Также, имя этой функции (n) добавляется в 'глобальное' [global] пространство имен функций. Теперь, когда нам потребуется функция в lua мы используем это имя, которое будет связано с нашей функцией.

С помощью макрокоманды lua_register, мы предоставили lua две функции с именами addNPC  и deleteNPC. Теперь я могу использовать их в любом скрипте lua. Итак, основываясь на предыдущем примере, если Вы исследуете main.cpp, то заметите такие изменения:

int main(int argc, char* argv[]) { lua_State* luaVM = lua_open(0);

if (NULL == luaVM) { printf("Error Initializing lua\n"); return -1; }

// инициализация стандартных библиотечных функции

lua_baselibopen(luaVM); lua_iolibopen(luaVM); lua_strlibopen(luaVM); lua_mathlibopen(luaVM);

printf("Simple Functional lua interpreter\n"); printf("Based on lua version 4.0.1\n"); printf("Registering Custom C++ Functions.\n"); lua_register( luaVM, "addNPC", l_addNPC ); lua_register( luaVM, "deleteNPC", l_deleteNPC );

printf("Enter lua commands. type 'exit' to exit\n");

printf("\n>"); lua_dofile(luaVM, "./startup.lua");

// Вывод NPC которые были добавлены.

theNPCManager->Dump();

lua_close(luaVM);

return 0; }

<


Содержание  Назад  Вперед