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 }
lua State加载部分库的更多相关文章
- cocos2dx lua 热加载实现
[Q]原创 2015-08-30 在公司使用cocos2dx+lua 开发游戏有一段时间了,刚好lua的热更新交给我负责.以前热更新的lua脚本大部分都是在下载之后加载.最近策划又有新需求,需要在游戏 ...
- cocos2d-x的lua脚本加载CocostudioUI两种方式
前言 当前版本使用的是quick cocos2dx lua 3.3.UI使用cocostudio编辑器1.6.0.我们在程序里面可以使用两种方式进行解析UI.开始的时候用的是quick的方法, 结果遇 ...
- 关于cocos2dx for lua资源加载优化方案
之前我写游戏加载都是从一个json文件写入要加载的文件名来实现加载,但是如果资源 比较多的情况下,会导致非常难管理,需要逐个写入.所以换了另外一种方式来加载文件. 首先,我是通过场景之前的切换时候,加 ...
- cocos2dx 3.x for lua "异步加载"实现过程
在lua中,cocos2dx 建立的栈只能被一个线程(主线程)访问,如果在c++建立子线程,然后通过c++调用lua回调函数实现异步加载就会报错. 如果试图通过c++子线程直接实现加载资源,返回一个布 ...
- ESP8266 LUA脚本语言开发: 准备工作-LUA文件加载与变量调用
前言 这节说一下多个文件调用 多个文件之间变量调用 准备两个文件 init.lua other.lua 开始 模块默认一开始调用的是init.lua 咱让init.lua调用 other.lua 很简 ...
- cocos2dx 3.x lua 网络加载并且保存资源(unix、linux)
#ifndef __DazzleParkour__TextLoader__ #define __DazzleParkour__TextLoader__ #include <stdio.h> ...
- JqueryUI Dialog 加载动态页 部分页
问题:使用JqueryUIDialog 加载部分页,可以弹出对话框,但是在操作页面上的按钮是提示"dialog"找不到,思路是,先取到部分页加载到要dialog的Div上,在dia ...
- lua加载函数require和dofile
lua加载函数require和dofile Lua提供高级的require函数来加载运行库.粗略的说require和dofile完成同样的功能但有两点不同: 1. require会搜索目录加载文件; ...
- lua的模块加载require
加载指定的模块.首先函数会在 package.loaded 这个表中查看是否已经加载 了 modname 这个模块.如果是,那么 require 会返回保存在 package.loaded[modna ...
随机推荐
- JavaScript 框架------------AngularJS(上)
一.简单了解一下AngularJS AngularJS 是一个 JavaScript 框架.它可通过 <script> 标签添加到 HTML 页面. AngularJS 通过 指令 扩展了 ...
- readfile & file_get_contents异同
记录一下:应用memcache时,准备把整个文件缓存到内存中,遇到了比较奇怪的事情,因为最初使用readfile来读取文件,结果这个函数返回一个字节数,而不是一个字符串,于是文件没办法再输出,最后使用 ...
- 我的python学习笔记一
我的python学习笔记,快速了解python,适合有C语言基础的. http://note.youdao.com/noteshare?id=93b9750a8950c6303467cf33cb1ba ...
- 学习率 Learning Rate
本文从梯度学习算法的角度中看学习率对于学习算法性能的影响,以及介绍如何调整学习率的一般经验和技巧. 在机器学习中,监督式学习(Supervised Learning)通过定义一个模型,并根据训练集上的 ...
- 翻译:MariaDB ALTER TABLE语句
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- macbook 263企业邮箱设置
第一步:打开邮箱,点击添加账号,选择其他 第二步:填写完整的电子邮件地址和密码 第三步:填写收件服务器(popcom.263xmail.com),发件服务器(smtpcom.263xmail.com)
- 认识:ThinkPHP的编译缓存文件~runtime.php
1.定义单入口文件(index.php) 在单入口index.php中不定义这两项时,会生成编译缓存文件~runtime.php define('RUNTIME_PATH','./App/Temp/' ...
- Linux入门之常用命令(3)
df 查看硬盘总容量.已用容量和inode [-ikm] du 查看文件已用容量,显示所有文件 每块硬盘最多四个分区. fdisk [-l] [设备名称] 硬盘分区工具 (-l 显示这张硬盘的分区) ...
- 51nod 1118 机器人走方格 解题思路:动态规划 & 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题
51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...
- 初学node.js有感三
WebStorm下的node.js 一.回顾与继续 在前面,我们知道了node.js的基本框架和思路,在这些原生环境下我们对node.js的设计思想有了比较深刻的认识,并且具有了编写大型程 ...