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()
复制代码

 

运行结果

 

 

 

 

posted @   yanghui01  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示