21
我適應了Lua的< 5.2編寫的圖書館和得到了一個電話,我不知道等價的:luaL_openlib替代的Lua 5.2
luaL_openlib(L, "Polycore", polycoreLib, 0);
凡polycoreLib
是
static const struct luaL_Reg polycoreLib []
我該如何取代luaL_openlib
的電話?
的LUA維基唯一states:
呼叫如
luaL_openlib(L, name, lreg, x);
應仔細改寫,因爲與給定名稱的全局表進行搜索並可能產生。
所以我有一個要添加自己的函數調用到全局庫中的多個對象。試圖找出如何在5.3中做到這一點總會讓我回到這個答案,但這個答案沒有足夠的信息給我。第一個代碼塊將覆蓋以前的條目。該修補程序在lua_getglobal()調用中引發nil引用問題,而我不知道最後一個查詢是如何查找或綁定到名稱「Ploycore」的。我錯過了什麼? – James
此外,在最後的返回1使它感覺它是爲了在luaopen_Polycore()調用...我可以在luaL_newlib()調用安全後在那裏做我的元表創建? (我得到我的gettop()調用是錯誤的)。 (和luaL_newlib()是lua_newtable()luaL_setfuncs()調用的包裝。有點) – James
@James'luaL_setfuncs'使用堆棧頂部的表。因此,與現有表合併只需將該表放入堆棧而不是新表。如果該提取的表已經可以從全局名稱獲得,那麼它將從全局名稱保持可用。顯然,你無法將表格與相同的鍵合併。如果你需要(或子表),那麼你需要以某種方式手動處理。 (子表很容易,因爲您只需創建一個新表並將其插入獲取的表中。) –