luabind: не могу вызвать основные функции lua, такие как print, tostring - PullRequest
5 голосов
/ 24 февраля 2012

Очень простой вопрос, который я думаю:

Код C ++, вызывающий lua, выглядит следующим образом:

lua_State* m_L;
m_L = lua_open();
luabind::open(m_L);
luaL_dofile(m_L, "test.lua");
try {
    luabind::call_function<void>(m_L, "main");
} catch (luabind::error& e) {
    std::string error = lua_tostring(e.state(), -1);
    std::cout << error << std::endl;
}
lua_close(m_L);

Теперь test.lua имеет следующее содержимое:

function main()
print "1"
end

При исполнении я получаю ошибку:

test.lua:2: attempt to call global 'print' (a nil value)

В чем проблема? Это как-то связано со средой? Я думал, что функции, такие как печать, определены в глобальной среде. Почему тогда его не нашли?

Большое спасибо.

1 Ответ

6 голосов
/ 25 февраля 2012

Как вы поняли, вам нужно вызвать luaopen_base, чтобы получить print и другие базовые функции.Затем вам нужно вызвать luaopen_string, luaopen_math, чтобы получить базовые модули и функции. Вместо того, чтобы писать все вручную, вы можете загрузить все базовые функции Lua сразу с помощью luaL_openlibs:

lua_State* m_L = luaL_newstate();
luaL_openlibs(m_L);
...