tam dwie odpowiedzi do tego: jeden do replikacji zachowanie wcześniejszych wersjach tutaj (gdzie stół globalny jest tworzony), a jeden za wdrażanie zachowanie, które jest obecnie konwencjonalnych (który jest stworzenie i powrócić anonimowy stół).
Dla tych pierwszych:
lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
lua_setglobal(L, "Polycore");
Nie dość jest taka sama jak luaL_openlib
, bo jeśli istnieje istniejąca globalna tabela Polycore
będzie zastąpienie go zamiast połączenia z nim. Jeśli scalanie jest problemem, należy lua_getglobal
pierwsze, a następnie, jeśli to pchnął stół ponownego wykorzystywania, że zamiast tworzyć nowe:
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");
Ten ostatni jest łatwiej, bo nie trzeba się martwić o połączenia:
lua_newtable(L);
luaL_setfuncs(L, polycoreLib, 0);
return 1;
z takim podejściem, to reponsibility rozmówcy związać tablicę, jak w:
local Polycore = require "Polycore"
Więc mam wiele obiektów, które są dodawanie własnych funkcji wywołania globalnej biblioteki. Próba odkrycia, jak to zrobić w 5.3, zawsze prowadzi mnie z powrotem do tej odpowiedzi, ale ta odpowiedź nie zawiera wystarczających informacji. Pierwszy blok kodu zastępuje poprzednie wpisy. Poprawka, która powoduje problemy z odniesieniem do zera w wywołaniu lua_getglobal() i nie widzę, jak ostatnia robi jakąkolwiek wyszukiwarkę LUB wiąże się z nazwą "Ploycore". czego mi brakuje? – James
Dodatkowo powrót 1 na końcu sprawia, że ma się wrażenie, że jest w luaopen_Polycore() wywołanie ... Czy mogę utworzyć moje meta table tam po luaL_newlib() zadzwoń bezpiecznie? (Otrzymywałem moje wywołania gettop() by się myliły). (i luaL_newlib() to wrapper dla lua_newtable() luaL_setfuncs() połączeń .. kinda) – James
@ luames 'luaL_setfuncs' używa tabeli na górze stosu. Tak więc łączenie z istniejącą tabelą wymaga tylko umieszczenia tej tabeli na stosie zamiast nowej tabeli. Jeśli pobrana tabela jest już dostępna z globalnej nazwy, pozostanie dostępna z globalnej nazwy. Oczywiście nie można łączyć tabel z tymi samymi kluczami. Jeśli potrzebujesz tego (lub podtabeli), musisz jakoś to zrobić ręcznie. (Stoły podrzędne są łatwe, ponieważ właśnie tworzysz nową tabelę i wstawiasz ją do pobranego stołu.) –