lua 的堆栈 与 C++的获取笔录
2016-08-21 22:51
309 查看
static int average(lua_State *L) { /* get number of arguments */ int n = lua_gettop(L); double sum = 0; int i; /* loop through each argument */ for (i = 1; i <= n; i++) { /* total the arguments */ sum += lua_tonumber(L, i); } /* push the average */ lua_pushnumber(L, sum / n); /* push the sum */ lua_pushnumber(L, sum); /* return the number of results */ return 2; }
在C++函数,依次压入平均数av和sum两个结果,在堆栈中也就如下次序:
sum
av
在lua中调用average函数,是这样的情况
av,sum=average(1,2,3)
从上面可以看出,在C++压入的次序和在lua脚本中获取的次序是一致的
而C++获取lua脚本的情况
av,sum=average(1,2,3)
return av,sum
lua_tonumber(L,-1)表示获取栈顶的第一个参数,而这个参数到底是什么呢?
这个参数sum的值,也就是lua脚本中遵循从左往右压入参数,在脚本中是依次压入av,sum
所以在栈顶是这样的情况
sum
av
所以如果要获取av这个值,则需要调用lau_tonumber(L,-2)
相关文章推荐
- Lua语言学习(二)------Lua算术运算的Metamethods
- Lua中文教程学习笔记 (3)基本语法
- (三)Lua表达式
- 150. Evaluate Reverse Polish Notation
- traficserver 加入lua脚本,配置响应头信息
- 章鱼lua扩展模块
- Lua 语言 15 分钟快速入门
- lua Date和Time
- Lua 随机数生成问题
- Lua和C++交互详细总结
- Lua中文教程学习笔记 (2) 表达式
- Lua 学习开篇
- Weak tables and Finalizer in Lua(Lua的弱表)
- Lua中文教程学习笔记 (1) 类型和值
- 使用LUA userdata手动绑定C++对象
- android动画之interpolator和typeEvaluator用法详解
- android动画之interpolator和typeEvaluator用法详解
- android动画之interpolator和typeEvaluator用法详解
- Lua string库详解
- lua 相关的资源