zoukankan      html  css  js  c++  java
  • 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
     
     }
     
  • 相关阅读:
    算法学习算法复杂度
    算法学习冒泡排序和快速排序
    焦点管理
    数据结构学习链表、双向链表、循环链表
    数据结构学习数组、栈和队列
    数据结构学习集合
    数据结构学习字典和散列表
    (转)一个webservice的小demo
    堆栈详解
    JS实现大小写转换
  • 原文地址:https://www.cnblogs.com/youxin/p/4918113.html
Copyright © 2011-2022 走看看