I am adapting a library written for Lua < 5.2 and got to a call I don't know the equivalent of:
luaL_openlib(L, "Polycore", polycoreLib, 0);
Where polycoreLib
is a
static const struct luaL_Reg polycoreLib []
How can I replace the call to luaL_openlib
?
The lua wiki only states:
Calls such as
luaL_openlib(L, name, lreg, x);
should be carefully rewritten because a global table with the given name will be searched and possibly created.
There's two answers to this: one for replicating the behaviour of earlier versions here (where a global table is created), and one for implementing the behaviour that is now conventional (which is to create and return an anonymous table).
For the former:
This isn't quite the same as
luaL_openlib
, because if there is an existing global tablePolycore
it will overwrite it rather than merging with it. If merging is a concern, uselua_getglobal
first, then if it pushed a table re-use that rather than creating a new one:The latter is easier because you don't need to care about merging:
With this approach, it is the caller's reponsibility to bind the table, as in: