Lua和C++交互 学习记录之四:全局table交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍)
部分内容查阅自:《Lua 5.3 参考手册》中文版 译者 云风 制作 Kavcc
vs2013+lua-5.3.3
1.C++读取Lua中的table
①在hello.lua中设置一个全局table:
global_c_read_table = {integer_val = ,double_val = 2.34,string_val = "test_string"}
②在C++中读取
//lua->stack,得到全局表,位置-1
lua_getglobal(L, "global_c_read_table"); //-------------------得到第一个值----------------------------
//c->statck,设置key值,位置-1(上面的-1变为-2)
lua_pushstring(L, "integer_val"); //lua->statck,将-1位置的key值弹出,从lua中得到对应key的值,并将结果放在-1的位置
//如果没有值,则结果为TNIL
lua_gettable(L, -);//返回值为值的类型 //statck->c
if (lua_isinteger(L, -)){
printf("integer_val : %lld\n", lua_tointeger(L, -));
} //弹出-1位置的结果,之后全局表的位置恢复到-1
lua_pop(L, ); //-------------------重复上述步骤,得到第二个值----------------------------
lua_pushstring(L, "double_val");
lua_gettable(L, -);//返回值为值的类型
if (lua_isnumber(L, -)){
printf("double_val : %g\n", lua_tonumber(L, -));
}
lua_pop(L, );
//-------------------重复上述步骤,得到第三个值----------------------------
lua_pushstring(L, "string_val");
lua_gettable(L, -);//返回值为值的类型
if (lua_isstring(L, -)){
printf("string_val : %s\n", lua_tostring(L, -));
}
lua_pop(L, );
③lua_getfield函数
//使用lua_getfield代替lua_pushxxx和lua_gettable两个函数,返回值为值的类型
lua_getfield(L, -, "integer_val");
在 Lua 中,这个函数可能触发对应 "index" 事件对应的元方法。
在后面的 绑定C++类在Lua中面向对象 会使用到其对应的lua_setfield方法。
2.C++将table写入Lua
①C++写入
//c->stack,创建一个新的table放到-1的位置
lua_newtable(L); //c->stack,增加一个key,放在-1的位置,table位置变为-2
lua_pushstring(L, "integer_val"); //c->stack,增加key对应的值,放在-1位置,key位置变为-2,table位置变为-3
lua_pushinteger(L, ); //将key和val设置到table中,并弹出key和val,此时table位置变为-1
lua_settable(L, -); //stack->lua,将table赋值到lua中,并弹出table
lua_setglobal(L, "global_c_write_table");
②在hello.lua中进行Lua读取
for k,v in pairs(global_c_write_table) do
print("k = ",k," v = ",v)
end
3.其它常用table函数
①LUA_API int (lua_rawget) (lua_State *L, int idx);
类似于 lua_gettable , 但是作一次直接访问(不触发元方法),速度更快。
返回值为值的类型。
②LUA_API void (lua_rawset) (lua_State *L, int idx);
类似于 lua_settable , 但是是做一次直接赋值(不触发元方法),速度更快。
返回值为值的类型。
Lua和C++交互系列:
《Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块》
《Lua和C++交互 学习记录之八:C++类注册为Lua模块》
《Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类》
Lua和C++交互 学习记录之四:全局table交互的更多相关文章
- Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之六:全局函数交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之五:全局数组交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之三:全局值交互
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...
- Lua和C++交互 学习记录之八:C++类注册为Lua模块
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- Lua和C++交互 学习记录之一:C++嵌入脚本
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
- SpringMVC学习记录七——sjon数据交互和拦截器
21 json数据交互 21.1 为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservi ...
随机推荐
- ElasticSearch vs Solr多维度分析对比
福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号: 大数据躺过的坑 Java从入门到架构师 人工智能躺过的坑 Java全栈大联盟 ...
- FJOI2019游记
应该是.....尽力了吧 day0:下午到酒店,晚上魔兽(with lyc)+雀魂.心里也清楚,今年只是来观光的. day1:上午暴力打完走人.下午和晚上魔兽+雀魂+300. day2:暴力打到一半拉 ...
- Mybatis的Mapper接口方法不能重载
今天给项目的数据字典查询添加通用方法,发现里边已经有了一个查询所有数据字典的方法 List<Dict> selectDictList(); 但我想设置的方法是根据数据字典的code查询出所 ...
- protocol method: #method<channel.close>(reply-code=406, reply-text=PRECONDITION_FAILED - unknown delivery tag 2, class-id=60, method-id=80)
Caused by: com.rabbitmq.client.ShutdownSignalException: channel error; reason: {#method<channel.c ...
- nagios监控oracle 表空间
oracle表空间满的危害以及处理方式见我的博客链接https://www.cnblogs.com/-abm/p/9764803.html 除此之外我们还需要对表空间实时监控,这样就可以及时了解表空间 ...
- 基础_cifar10_model
今天进一步在cifar10数据集上解决几个问题: 1.比较一下序贯和model,为什么要分成两块: 2.同样的条件下,我去比较一下序贯和model.这个例子作为今天的晚间运行. 1.比较一下序贯和mo ...
- (2编写网络)自己动手,编写神经网络程序,解决Mnist问题,并网络化部署
基于<神经网络和深度学习>这本绝好的教材提供的相关资料和代码,我们自己动手编写"随机取样的梯度下降神经网络".为了更好地说明问题,我们先从简单的开始: 1.sigmod ...
- poj 1456 Supermarket - 并查集 - 贪心
题目传送门 传送点I 传送点II 题目大意 有$n$个商品可以销售.每个商品销售会获得一个利润,但也有一个时间限制.每个商品需要1天的时间销售,一天也只能销售一件商品.问最大获利. 考虑将出售每个物品 ...
- error C4996: Function call with parameters that may be unsafe – this call relies on the caller to ch
在加入QCustomplot时有如题的错误 1>c:\program files (x86)\microsoft visual studio11.0\vc\include\xutility(21 ...
- Python3基础 dict 推导式 生成10以内+奇数的值为True 偶数为False的字典
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...