zoukankan      html  css  js  c++  java
  • lua State加载部分库

    lua State加载部分库

       在lua中,通常我们用luaL_openlibs(L)加载所有的lub标准库,但是有时候我们想只加载部分,有没有什么好的办法呢?在luaproc看到如下办法:

    static void registerlib( lua_State *L, const char *name, lua_CFunction f ) {
        lua_getglobal( L, "package" );
        lua_getfield( L, -1, "preload" );
        lua_pushcfunction( L, f );
        lua_setfield( L, -2, name );
        lua_pop( L, 2 );
    }
    
    static void openlibs( lua_State *L ) {
        lua_cpcall( L, luaopen_base, NULL );
        lua_cpcall( L, luaopen_package, NULL );
        registerlib( L, "io", luaopen_io );
        registerlib( L, "os", luaopen_os );
        registerlib( L, "table", luaopen_table );
        registerlib( L, "string", luaopen_string );
        registerlib( L, "math", luaopen_math );
        registerlib( L, "debug", luaopen_debug );
    }
    int lua_cpcall (lua_State *L, lua_CFunction func, void *ud);

    Calls the C function func in protected mode. func starts with only one element in its stack, a light userdata containing ud. In case of errors, lua_cpcall returns the same error codes as lua_pcall, plus the error object on the top of the stack; otherwise, it returns zero, and does not change the stack. All values returned by func are discarded.

    上面是5.1的做法。luaproc新做法如下:

     static void luaproc_reglualib( lua_State *L, const char *name,
                                    lua_CFunction f ) {
       lua_getglobal( L, "package" );
       lua_getfield( L, -1, "preload" );
       lua_pushcfunction( L, f );
       lua_setfield( L, -2, name );
       lua_pop( L, 2 );
     }
     
     static void luaproc_openlualibs( lua_State *L ) {
       requiref( L, "_G", luaopen_base, FALSE );
       requiref( L, "package", luaopen_package, TRUE );
       luaproc_reglualib( L, "io", luaopen_io );
       luaproc_reglualib( L, "os", luaopen_os );
       luaproc_reglualib( L, "table", luaopen_table );
       luaproc_reglualib( L, "string", luaopen_string );
       luaproc_reglualib( L, "math", luaopen_math );
       luaproc_reglualib( L, "debug", luaopen_debug );
     #if (LUA_VERSION_NUM == 502)
       luaproc_reglualib( L, "bit32", luaopen_bit32 );
     #endif
     #if (LUA_VERSION_NUM >= 502)
       luaproc_reglualib( L, "coroutine", luaopen_coroutine );
     #endif
     #if (LUA_VERSION_NUM >= 503)
       luaproc_reglualib( L, "utf8", luaopen_utf8 );
     #endif
     
     }
  • 相关阅读:
    shell脚本比较字符串相等
    从自身的经历讨论手工测试与自动化测试
    读《Linux Shell脚本攻略》(第2版) 一遍、二遍体会
    也许开发需要的只是一份简单明了的表格
    linux 命令:tr 的简单使用
    docker的数据持久化
    docker基础操作
    centos7 docker镜像源设置
    DockerUI(图形化管理)
    Docker 常用命令
  • 原文地址:https://www.cnblogs.com/lsgxeva/p/7748625.html
Copyright © 2011-2022 走看看