lua - 为 luaL_newmetatable 选择唯一的名称

标签 lua

我正在编写一个 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/

相关文章:

c - 从 Lua 调用时 undefined symbol

lua - 使用 nodeMCU 的 Wifi 网状网络

lua - 如何通过键删除lua表条目?

c++ - 有没有办法设置 printf 函数的输出序列?

c++ - 制作 map 编辑器的语言/GUI库

lua - 如何快速连续生成唯一的随机数?

nginx - 使用 lua 和 nginx 时出错

loops - 如果在lua中执行了inner'for'循环,如何跳出外循环

debugging - 如何更改 AwesomeWM 标签名称?

optimization - 如何在 Lua 中预先确定数组的大小?