我在寫一個使用luaL_newmetatable()
註冊了一些元表的Lua庫。由於其他圖書館也可以這樣做,所以我想問一下,避免使用同一個名稱兩次的策略是一個好策略。我正在考慮使用反向DNS名稱,如com.mydomain.mylibrary
,我猜這應該是非常安全的。不過,我想問問是否可以使用luaL_newmetatable()
爲圖書館選擇唯一名稱的更好或標準方式。爲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;
}
get/set類似。結帳,例如我的Lua-cURL庫。
爲什麼不使用指向字節的指針(保留但未初始化大小爲1字節的變量)來節省內存?除了創建一個輕量級用戶數據之外,您是否將這個字符串指針用於其他目的?例如,你用這個字符串來識別嗎? –
我會用它描述的是在「對象」,因爲這串是最終的Lua錯誤信息輸出的字符串:
例如如果元表被命名爲「數據庫連接」:
標準輸入:1:壞參數#1「狀態」(數據庫連接料,有沒有價值)
如果使用UUID,沒有人能看得懂輸出。
以及如何避免metatable名稱衝突?其他開發人員可能會爲他自己的metatable使用相同的單詞。這是OP所問的。 –
我還沒有嘗試過,但可能會使用帶有嵌入式NUL字符的字符串:「數據庫連接\ 0x00
我剛剛嘗試過,它實際上工作。只是不確定字符串是否在創建metatable時或輸出發生時被剝離... –
- 1. MySQL選擇名稱的唯一配對
- 2. 從另一個表中選擇唯一的名稱(名稱)?
- 3. 如何選擇具有唯一名稱的所有複選框?
- 4. 選擇一組名稱
- 5. 從連接表列表中選擇唯一的列名稱
- 6. 用jquery選擇沒有名稱或ID的非唯一標籤
- 7. 您可以指定與NSPredicate「從......選擇唯一的名稱」?
- 8. SQL - 僅在最大日期選擇唯一名稱?
- 9. ValidationRule爲了實現唯一名稱
- 10. 爲單選按鈕添加唯一名稱
- 11. jQuery選擇名稱
- 12. 翻轉(。)的唯一名稱
- 13. 唯一事件名稱
- 14. 子集的唯一名稱
- 15. c#唯一變量名稱
- 16. LINQ:唯一名稱列表
- 17. 生成唯一名稱?
- 18. 爲Access選擇唯一值的唯一區別
- 19. 如何選擇名稱爲Object的UIImageView
- 20. g:country選擇國家名稱作爲值
- 21. 選擇列名稱爲不工作Rails3
- 22. 爲doxygen選擇C結構名稱?
- 23. 選擇* vs選擇所有列名稱
- 24. 在一列中選擇兩個名稱
- 25. 添加一個名稱來選擇
- 26. 根據ID選擇一個名稱
- 27. LINQ選擇一個名稱的新類
- 28. 在SQL中選擇一個名稱
- 29. Twilio試圖爲會議名稱設置一個唯一的名稱
- 30. 只選擇唯一記錄
使用[GUID](https://www.guidgenerator.com/online-guid-generator.aspx),只要你需要唯一的字符串(雖然不是人類可讀) –