我正在编写一个 Lua 库,它使用 luaL_newmetatable()
注册一些元表。由于其他库也可能这样做,我想问什么是避免同名使用两次的好策略。我正在考虑使用像 com.mydomain.mylibrary
这样的反向 DNS 名称,我想这应该非常安全。但是,我想问是否有更好或标准的方法来使用 luaL_newmetatable() 为库选择唯一名称。
最佳答案
我喜欢使用带有指向字符串的指针的 lightuserdata。
#define LCURL_EASY_NAME LCURL_PREFIX" Easy"
static const char *LCURL_EASY = LCURL_EASY_NAME;
它只需要简单的函数即可使用。
int lutil_newmetatablep (lua_State *L, const void *p) {
lua_rawgetp(L, LUA_REGISTRYINDEX, p);
if (!lua_isnil(L, -1))
return 0;
lua_pop(L, 1);
lua_newtable(L); /* create metatable */
lua_pushvalue(L, -1); /* duplicate metatable to set*/
lua_rawsetp(L, LUA_REGISTRYINDEX, p);
return 1;
}
与获取/设置类似。结帐例如我的Lua-cURL图书馆。
关于lua - 为 luaL_newmetatable 选择唯一的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45984445/