lua全局表
lua的几个全局表存放在这几个索引上,前2个无法在lua脚本中直接访问,第3个等同于lua脚本的_G
mylib.c
#include <string.h> #include <stdlib.h> #include <lauxlib.h> #if !defined(LUA_VERSION_NUM) || (LUA_VERSION_NUM <= 500) #define luaL_checkstring luaL_check_string #endif #ifdef __cplusplus extern "C" { #endif static int test1(lua_State* L) { printf("stack 1: %d\n", lua_gettop(L)); lua_pushstring(L, "k1"); lua_pushstring(L, "v1"); lua_rawset(L, LUA_REGISTRYINDEX); // 相当于: 栈[LUA_REGISTRYINDEX].k1 = "v1",栈顶弹出2个元素 printf("stack 2: %d\n", lua_gettop(L)); lua_pushvalue(L, LUA_REGISTRYINDEX); lua_pushvalue(L, LUA_ENVIRONINDEX); lua_pushvalue(L, LUA_GLOBALSINDEX); //对应_G printf("stack 3: %d\n", lua_gettop(L)); return 3; //3个返回值 } static const struct luaL_reg mylib_funcs[] = { {"test1", test1}, {0, 0} }; LUALIB_API int luaopen_mylib(lua_State *L) { luaL_openlib(L, "mylib", mylib_funcs, 0); return 1; } #ifdef __cplusplus } #endif
test.lua
local function Test2() local mylib = require("mylib") local tab1, tab2, tab3 = mylib.test1() print(tab1, tab2, tab3) print(_G) print(tab1.k1) end Test2()
运行结果
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性