lua调C的返回table
2014-02-24 11:07
387 查看
第一个问题是lua调C的返回值的问题
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//测试返回table
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
/**//**
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
下面代码相当lua如下:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
function
return_table()
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
local
t = {}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
t.result
= true
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
t.data
= "hello"
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return
t
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
end
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int
tableReturnTable(lua_State * L)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_newtable(L);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int
table_index = lua_gettop(L);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_pushboolean(L,
true);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_setfield(L,
table_index, "result");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_pushstring(L,
"hello", 5);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_setfield(L,
table_index, "data");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return
1;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
第二问题多参数返回
//测试多返回
/**
下面代码相当lua如下:
function mult_return()
return "hello",100,true
end
*/
int mult_return(lua_Status * L)
{
lua_pushstring(L, "hello");
lua_pushnumber(L,100);
lua_pushboolean(L,true);
return 3;
}
第三个问题,删除表中的元素
local t = {}
t.hello = "hello“
t[1] = 100
删除办法如下:
t.hello = nil
t[1] = nil
清空table
table.foreach(t, function(k,v) t[k] = nil end)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//测试返回table
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
/**//**
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
下面代码相当lua如下:
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
function
return_table()
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
local
t = {}
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
t.result
= true
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
t.data
= "hello"
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return
t
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
end
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
*/
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int
tableReturnTable(lua_State * L)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_newtable(L);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
int
table_index = lua_gettop(L);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_pushboolean(L,
true);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_setfield(L,
table_index, "result");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_pushstring(L,
"hello", 5);
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
lua_setfield(L,
table_index, "data");
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
return
1;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
第二问题多参数返回
//测试多返回
/**
下面代码相当lua如下:
function mult_return()
return "hello",100,true
end
*/
int mult_return(lua_Status * L)
{
lua_pushstring(L, "hello");
lua_pushnumber(L,100);
lua_pushboolean(L,true);
return 3;
}
第三个问题,删除表中的元素
local t = {}
t.hello = "hello“
t[1] = 100
删除办法如下:
t.hello = nil
t[1] = nil
清空table
table.foreach(t, function(k,v) t[k] = nil end)
相关文章推荐
- C++返回table给lua
- C++返回table给lua
- c++返回table给lua
- c中获取从lua脚本返回的table时栈的变化
- (原创) cocos2d-x 3.0+ lua 学习和工作(4) : 公共函数(5): 返回指定表格中的所有键(key):table.keys
- 【转】返回lua一个table
- lua中遍历table的几种方式比较
- lua中求table长度问题
- C++对Lua中table进行读取、修改和创建
- 如何将ajax请求返回的Json格式数据循环输出成table形式
- Lua - table 当作 dictionary 乱序
- Lua教程(三):C语言、C++中调用Lua的Table示例
- ABAP--如何返回'F4IF_INT_TABLE_VALUE_REQUEST'函数隐含的字段
- LUA 关于table与多维的使用
- lua table深度colone
- lua使用table.concat连接大量字符串
- 看到返回TABLE的函数,还有不错的分解字串。
- 【lua】table是否为空的判断
- 不管是lua还是其它语言,该用结构体的用结构体,不要单独给一个table随便加一个字段
- 在lua中如何remove掉table里面的数据