我正在编写一个Lua库,它使用luaL_newmetatable()
注册一些元表。由于其他库也可以这样做,我想问一下什么是避免使用两次相同名称的好策略。我正在考虑使用像com.mydomain.mylibrary
这样的反向DNS名称,我猜这应该是非常安全的。但是,我想问一下是否有更好或更标准的方法可以使用luaL_newmetatable()
选择库的唯一名称。
答案 0 :(得分:2)
我喜欢使用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;
}
类似于get / set。结帐,例如我的Lua-cURL图书馆。
答案 1 :(得分:0)
我会使用一个字符串来描述"对象"因为这个字符串最终在Lua错误消息中输出:
e.g。如果metatable被命名为"数据库连接":
stdin:1:不好参数#1到'状态' (期望数据库连接,没有价值)
如果您使用UUID,则没有人能理解输出。