Ответ 1
Здесь два ответа: один для репликации поведения более ранних версий здесь (где создается глобальная таблица) и один для реализации поведения, которое теперь является обычным (создание и возвращение анонимной таблицы).
Для первого:
lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
lua_setglobal(L, "Polycore");
Это не совсем то же самое, что и luaL_openlib
, потому что, если существует существующая глобальная таблица Polycore
, она будет перезаписывать ее, а не сливаться с ней. Если слияние является проблемой, сначала используйте lua_getglobal
, а затем, если он перетаскивал повторное использование таблицы, а не создавал новый:
lua_getglobal(L, "Polycore");
if (lua_isnil(L, -1)) {
lua_pop(L, 1);
lua_newtable(L);
}
luaL_setfuncs(L, polycoreLib, 0);
lua_setglobal(L, "Polycore");
Последнее проще, потому что вам не нужно заботиться о слиянии:
lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
return 1;
При таком подходе репликация вызывающего абонента связана с таблицей, как в:
local Polycore = require "Polycore"