主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍)

部分内容查阅自:《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和C++交互 学习记录之二:栈操作

Lua和C++交互 学习记录之三:全局值交互

Lua和C++交互 学习记录之四:全局table交互

Lua和C++交互 学习记录之五:全局数组交互

Lua和C++交互 学习记录之六:全局函数交互

Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

Lua和C++交互 学习记录之八:C++类注册为Lua模块

Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

Lua和C++交互 学习记录之四:全局table交互的更多相关文章

  1. Lua和C++交互 学习记录之七:C++全局函数注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  2. Lua和C++交互 学习记录之六:全局函数交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  3. Lua和C++交互 学习记录之五:全局数组交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  4. Lua和C++交互 学习记录之三:全局值交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  5. Lua和C++交互 学习记录之九:在Lua中以面向对象的方式使用C++注册的类

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 在 ...

  6. Lua和C++交互 学习记录之八:C++类注册为Lua模块

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  7. Lua和C++交互 学习记录之二:栈操作

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  8. Lua和C++交互 学习记录之一:C++嵌入脚本

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...

  9. SpringMVC学习记录七——sjon数据交互和拦截器

    21       json数据交互 21.1      为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservi ...

随机推荐

  1. Install jdk on Ubuntu16

    wikiHow to Install Oracle Java JDK on Ubuntu Linux This tutorial will cover the installation of 32-b ...

  2. Python3 tkinter基础 Frame bind 捕捉多键同时按

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. 集训DAYn——组合数学(1)

    组合 又到了我们信息老师讲数学课了,吼吼吼 然后数学老师中途探望了一下,哇塞塞,然后他看到黑板上的题,微妙的笑了. 排列: 从n个数中有序的选出m个数的方案数是多少?第一个数有n种取法,第二个数有n- ...

  4. php高级开发参考地址

    高级开发 : http://www.cnblogs.com/bananaplan/p/The-Right-Way-For-PHPer.html

  5. 【做题】CFedu41G. Partitions——推式子

    实际上这题的题面还是颇有意思,对两个划分不同的定义暗示了第二类斯特林数,模数是\(1000000007\)又表明这题不是NTT. 那么一开始的想法是考虑每个集合的贡献.设这个集合为\(S\),那么它的 ...

  6. 【分库、分表】MySQL分库分表方案

    一.Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. ...

  7. hihoCoder week13 最近公共祖先·一

    用的dfs,自下往上搜索一个节点的所有祖先,然后在相应祖先 判断是否是另一个节点的祖先,如果是 就截止,否则继续往上搜索,直到搜索到,或者知道所有的祖先都被扫描完成 #include <bits ...

  8. 题解——P1133 教主的花园DP

    直接设二维状态具有后效性,会爆零 然后需要加一维 然后70 看了题解之后发现没有考虑1和n的关系 考虑之后,四十 然后懵逼 突然发现自己的ans更新写错了,导致每次ans都是第一个取30的情况的解 然 ...

  9. (zhuan) Paper Collection of Multi-Agent Reinforcement Learning (MARL)

    this blog from: https://github.com/LantaoYu/MARL-Papers Paper Collection of Multi-Agent Reinforcemen ...

  10. Unity3D学习笔记(三十三):矩阵

    矩阵 矩阵就是一行和列组织起来的矩形数字块. 矩阵可以理解为是向量的数组.   矩阵的维度和记法 矩阵的维度是包含多少行多少列!例如1行2列的矩阵 记法:矩阵m中,对于第1行第2列的元素,我们记为m1 ...