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

部分内容查阅自:《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, int idx);

使用于数组,可得到数组元素个数;

以数字形式返回给定索引处值的“长度”; 它等价于在 Lua 中调用 '#' 的操作。(非数组使用#将得不到正确的值)

如果操作结果不是一个整数,则抛出一个错误。(这种情况只发生在触发元方法时。)

②LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n);

注意对应的lua_rawget函数。

获取索引号n的数组值,返回的int值为值的类型。

这是一次直接访问,不会触发元方法,效率高。

③LUA_API void  (lua_rawseti) (lua_State *L, int idx, lua_Integer n);

注意对应的lua_rawset函数

设置索引号n的数组值。

这个函数会将值弹出栈。 赋值是直接的;即不会触发元方法,效率高。

3.C++读取Lua中数组

①Lua中数组

global_c_read_array = {,6.78,"array string"}

②C++中读取

 //lua->stack,得到全局数组,位置-1
lua_getglobal(L, "global_c_read_array"); //得到数组长度
lua_Integer array_len = luaL_len(L, -);
for (lua_Integer i = ; i <= array_len; ++i){
//lua->stack,全局数组位置-1,然后i为对应的索引值,将返回值放到-1的位置
int ret_type = lua_rawgeti(L, -, i); //--------------被替代的原操作table函数-------------
//lua_pushinteger(L, i);
//int ret_type = lua_gettable(L, -2); //也可以使用int ret_type = lua_rawget(L, -2); //stack->c
if (ret_type == LUA_TNUMBER){
if (lua_isinteger(L, -)){
printf("%lld\n", lua_tointeger(L, -));
}
else if (lua_isnumber(L, -)){
printf("%g\n", lua_tonumber(L, -));
}
}
else if (ret_type == LUA_TSTRING){
printf("%s\n", lua_tostring(L, -));
} lua_pop(L, );
}

4.C++写入Lua数组

①C++写入

 //c->stack,创建一个新的table放到-1的位置
lua_newtable(L); //c->stack,创建对应的key-val
lua_pushinteger(L, ); //设置值
lua_rawseti(L, -, );//对应key-val lua_pushnumber(L, 8.9); //设置值
lua_rawseti(L, -, );//对应key-val lua_pushstring(L, "test_string");//设置值
lua_rawseti(L, -, );//对应key-val //--------------被替代的原操作table函数-------------
//lua_pushinteger(L, 1); //设置key
//lua_pushinteger(L, 7);//设置值
//lua_settable(L, -3); //也可以使用lua_rawset(L,-3); //lua_pushinteger(L, 2); //设置key
//lua_pushnumber(L, 8.9);//设置值
//lua_settable(L, -3); //也可以使用lua_rawset(L,-3); //lua_pushinteger(L, 3); //设置key
//lua_pushstring(L, "test_string");//设置值
//lua_settable(L, -3); //也可以使用lua_rawset(L,-3); //stack->lua,将数组赋值到lua中,并弹出数组
lua_setglobal(L, "global_c_write_array");

②在hello.lua文件中Lua读取

 if global_c_write_array then
for i = , #global_c_write_array do
print("v = ", global_c_write_array[i])
end
end

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++交互 学习记录之五:全局数组交互的更多相关文章

  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++交互 学习记录之四:全局table交互

    主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<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. tomcat部署solr4.10

    1.创建solrHome mkdir /opt/solrHome 2.拷贝solr基础数据 /example/solr/* /opt/solrHome 将contrib和dist两个目录拷贝到/opt ...

  2. 02: pycharm远程linux开发和调试代码

    1.1 配置远程linux主机信息 参考博客:https://www.cnblogs.com/lei0213/p/7898301.html 1) 选择Tools--Deployment--Config ...

  3. QT---实现舒尔特方格(零基础入门)

    按照之前说的,加上舒尔特方格,读者还可以自行将此游戏做成APP放到手机上,后面还有贪吃蛇,Java版的飞机大战,五子棋,各类游戏会不断加上来的,当然,会免费附加源代码! 读者可以去4399去玩一下,可 ...

  4. ODAC(V9.5.15) 学习笔记(六)TOraSQL、TOraTable和TOraStoredProc

    TOraSQL是一个SQL语句执行控件,包括PL/SQL块等,不返回数据集结果. 名称 类型 说明 ChangeCursor Boolean 在非阻塞模式下是否允许改变屏幕的光标 WaitExecut ...

  5. ODAC(V9.5.15) 学习笔记(三)TOraSession(1)

    1. 连接相关 名称 类型 说明 ConnectDialog 执行连接对话框控件 Connected Boolean 连接状态,通过函数Connect和Disconnect连接或关闭数据库连接,并触发 ...

  6. C# 基于任务的异步模式的创建与使用的简单示例

    对于窗体程序,使用基于任务的异步模式需要用到Task类,下面示例下非常简单的用法. 1.创建一个拥有异步方法的类 该类拥有一个异步方法DoSomthingAsync,根据微软建议的命名规则该方法要带A ...

  7. windows下如何安装vundle?

    参考: http://blog.csdn.net/zhuxiaoyang2000/article/details/8636472 vundle是gmarik 受 ruby的 bunler的启发开发的. ...

  8. 思维|蚂蚁感冒|2014年蓝桥杯A组题解析第七题-fishers

    标题:蚂蚁感冒 长100厘米的细长直杆子上有n只蚂蚁.它们的头有的朝左,有的朝右. 每只蚂蚁都只能沿着杆子向前爬,速度是1厘米/秒. 当两只蚂蚁碰面时,它们会同时掉头往相反的方向爬行. 这些蚂蚁中,有 ...

  9. Markdown语法参考

    参考博客: https://www.jianshu.com/p/f3147a804368 https://www.jianshu.com/p/191d1e21f7ed https://www.jian ...

  10. C#Winform工具箱简介

    BindingSource:指定支持事务处理初始化Button:[按钮]用户单击它时引发事件 CheckBox:[复选框]允许用户选择或清除关联选项 CheckedListBox:[复选列表框]显示一 ...