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

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

部分内容查阅自:《Lua 5.3  参考手册》中文版 译者 云风 制作 Kavcc

vs2013+lua-5.3.3

1.C++读取Lua中的表

①在hello.lua中设置一个全局表:

global_c_read_table = {integer_val = 1,double_val = 2.34,string_val = "test_string"}

②在C++中读取

 1         //lua->stack,得到全局表,位置-1
 2         lua_getglobal(L, "global_c_read_table");
 3
 4         //-------------------得到第一个值----------------------------
 5         //c->statck,设置key值,位置-1(上面的-1变为-2)
 6         lua_pushstring(L,"integer_val");
 7
 8         //lua->statck,将-1位置的key值弹出,从lua中得到对应key的值,并将结果放在-1的位置
 9         //如果没有值,则结果为TNIL
10         lua_gettable(L, -2);
11
12         //statck->c
13         if (lua_isinteger(L, -1)){
14             printf("integer_val : %lld\n", lua_tointeger(L, -1));
15         }
16
17         //弹出-1位置的结果,之后全局表的位置恢复到-1
18         lua_pop(L, 1);
19
20         //-------------------重复上述步骤,得到第二个值----------------------------
21         lua_pushstring(L, "double_val");
22         lua_gettable(L, -2);
23         if (lua_isnumber(L, -1)){
24             printf("double_val : %g\n", lua_tonumber(L, -1));
25         }
26         lua_pop(L, 1);
27         //-------------------重复上述步骤,得到第三个值----------------------------
28         lua_pushstring(L, "string_val");
29         lua_gettable(L, -2);
30         if (lua_isstring(L, -1)){
31             printf("string_val : %s\n", lua_tostring(L, -1));
32         }
33         lua_pop(L, 1);

2.C++将表写入Lua

①C++写入

 1         //c->stack,创建一个新的table放到-1的位置
 2         lua_newtable(L);
 3
 4         //c->stack,增加一个key,放在-1的位置,table位置变为-2
 5         lua_pushstring(L, "integer_val");
 6
 7         //c->stack,增加key对应的值,放在-1位置,key位置变为-2,table位置变为-3
 8         lua_pushinteger(L, 1);
 9
10         //将key和val设置到table中,并弹出key和val,此时table位置变为-1
11         lua_settable(L, -3);
12
13         //stack->lua,将table赋值到lua中,并弹出table
14         lua_setglobal(L, "global_c_write_table");

②在hello.lua中进行Lua读取

1 for k,v in pairs(global_c_write_table) do
2     print("k = ",k," v = ",v)
3 end
时间: 2024-10-10 14:54:00

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

Mysql数据库周末学习之Mycat全局表 mysql DBA

Mysql数据库业务中有些数据类似于数据字典,比如配置文件的配置,常用业务的配置或者数据量不大很少变动的表,这些表往往不是特别大,但是大部分的业务场景都会用到,那么这种表适合于Mycat全局表,无须对数据进行切分,只要在所有的分片上保存一份数据即可,Mycat在Join操作中,业务表与全局表进行Join聚合会优先选择相同分片内的全局表join,避免跨库Join,在进行数据插入操作时,mycat将把数据分发到全局表对应的所有分片执行,在进行数据读取时候将会随机获取一个节点读取数据. 全局表的配置如

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

主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.C++调用Lua中函数 ①Lua中的函数 1 function add(x,y) 2 return x + y 3 end ②C++调用函数 1 //lua->stack,全局函数位置-1 2 lua_getglobal(L, "add"); 3 4 //c->stack,传

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

主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.数组 ①数组是key值从1开始并连续递增的table. ②索引号是从1开始,不是从0开始. 2.既然是table,那当然是可以用上一节的内容进行读写的. lua还提供了一些只针对数组进行操作的API,如下: ①LUALIB_API lua_Integer (luaL_len) (lua_State *L,

lua和c++交互 学习记录之一:C++嵌入脚本

主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3  参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1.首先需要编译出lua库 ①创建一个静态库工程,将lua-5.3.3里的所有文件包含到工程里面去 ②进行编译就可以得到一个lua的静态库,提供给后面的测试项目使用 2.创建学习测试console项目 ①引入上面步骤生成的lua静态库 ②包含lua的所有头文件 ③创建一个hello.lua,里面的内容只有一句

python2.7学习记录之四

1.从raw_input()读取的内容永远以字符串的形式返回,把字符串和整数比较就不会得到期待的结果,必须先用int()把字符串转换为我们想要的整型 2.list增加元素 为 append() 3.dict内部存放的顺序和key放入的顺序是没有关系的 4.得到分割后list的大小,,凡是长度 用len(#) 5.冒泡 可以直接用sort() 函数,对list

Yii学习笔记之四(表单验证 api 翻译)

1.表单验证 对于用户输入的所有数据,你不能信任,必须加以验证. 所有框架如此,对于yii 可以使用函数 yii\base\Model::validate()  进行验证 他会返回boolean值的 true /false 如果验证未通过,可以使用 yii\base\Model::$errors 属性进行处理,如下代码: <?php //加载表单模型(绝对地址方式) /*如果上面引入 use app\models\ContactForm; 则可以直接使用 $model = new Contact

Oracle学习记录 八 多表查询

1. 笛卡尔集 select * from emp, dept; 2. 等值连接 select ename, job from emp, dept where emp.deptno=dept.deptno; 3. 非等值连接 select ename, grade from emp, salgrade where sal between losal and hisal; 这个其实我不太明白到底是怎么弄的.前面的两种都容易理解,这个难道是 拿一个sal就去salgrade中找在哪个范围? 4. 自

Oracle学习记录 二 创建表等操作练习

进行了第一章的基本数据操作指令练习后,进行数据库的一些操作. 创建表class有两个栏:numbers和names: create table class (numbers number, names char(20)); 这样建名都是大写的了,不想这样就加上""双引号  numbers这是栏名,number这是数据类型 2. 在建表的时候,限制哪些数据可以存入哪些不可以 create table class2 (numbers number not null, names char(

MyCat实现读写分离+分库分表+全局表

前言 mycat功能强大,配置简单,作为数据库中间件,是一个非常优秀的开源产品,关于MyCat的部署安装,可以参考博文:MyCat部署安装. 本博文将展示mycat的如下功能: 读写分离: 分库分表: 全局表: 环境如下: 系统 IP 主机名 服务 Centos 7.5 192.168.20.2 mysql01 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql02 MySQL 5.7.24 Centos 7.5 192.168.20.3 mysql03 MyS