Lua中C API栈操作
向栈中压入数据:
lua_pushnil(lua_State*);
lua_pushboolean(lua_State*, bool);
lua_pushnumber(lua_State*, lua_Number);
lua_pushinteger(lua_State*, lua_Integer)
lua_pushlstring(lua_State*, const char*, size_t);
lua_pushstring(lua_State*, const char*);
获取栈中元素的类型
lua_type(lua_State* L, int index);
类型包括 LUA_TNIL, LUA_TBOOLEAN, LUA_TNUMBER, LUA_TSTRING, LUA_TTABLE, LUA_TFUNCTION, LUA_TUSERDATA
验证栈中的元素类型;
lua_is*(lua_State* L, int index)
其实有了lua_type()完全可以自己写类型验证的 每必要使用lua提供的API
比如可以定义
bool lua_is_number (lua_State* L, int index) {
return lua_type(L, index) == LUA_TNUMBER ? true : false;
}
所以完全是可以利用lua_type来自行定义对栈中元素的验证的。
获取栈中元素的类型的字符串表示:
lua_typename(lua_State*, int )这里的int值是通过lua_type()获取到的值
其实这些都可以通过lua_type(lua_State*)来进行实现
const char* lua_type_str(int lua_type) {
static char type[LUA_TYPE_LEN_MAX];
switch (lua_type) {
case LUA_TNIL:
strcpy(type, "nil");
break;
case LUA_TBOOLEAN:
strcpy(type, "boolean");
break;
case LUA_TNUMBER:
strcpy(type, "number");
break;
case LUA_TSTRING:
strcpy(type, "string");
break;
case LUA_TTABLE:
strcpy(type, "table");
break;
case LUA_TTHREAD:
strcpy(type, "thread");
break;
case LUA_TFUNCTION:
strcpy(type, "function");
break;
case LUA_TUSERDATA:
strcpy(type, "userdata");
break;
default:
strcpy(type, "unknown");
break;
}
return type;
}
这样就可以实现你自己的栈元素类型的字符串显示了
获取指定位置的元素可以使用lua_to*(lua_State*, int )
int lua_toboolean(lua_State*, int);
lua_Number lua_tonumber(lua_State*, int);
lua_Integer lua_tointeger(lua_State*, int );
const char* lua_tolstring(lua_State*, int, size_t length);
lua_gettop(lua_State*) 得到栈中元素的个数
lua_settop(lua_State*, int index)
设置栈中元素的个数,如果设置的值比当前栈中元素的个数多,则将多出的那部分全部丢弃,如果设置的值比当前栈中元素个数多,则将新加的值全部设置为nil.
lua_pushvalue(lua_State*, int index) 将index位置的值的副本压入栈顶
lua_remove(lua_State* L, int index)将指定位置的元素删除,并且其上的所有元素下移
lua_insert(lua_State*, int index) 将指定位置之上的元素上移,空出该位置,并将栈顶元素移到此处
lua_replace(lua_State*, int index)将栈顶元素弹出,并将其设置到指定的索引上。
lua_pop是以一个宏的形式进行定义的
#define lua_pop(L, n) lua_settop(L, -(n) - 1);
比如弹出栈顶的元素则可以使用 lua_pop(L, 1)
Lua中C API栈操作的更多相关文章
- 基于nginx+lua+redis高性能api应用实践
基于nginx+lua+redis高性能api应用实践 前言 比较传统的服务端程序(PHP.FAST CGI等),大多都是通过每产生一个请求,都会有一个进程与之相对应,请求处理完毕后相关进程自动释放. ...
- Lua 中的string库(字符串函数库)总结
(字符串函数库)总结 投稿:junjie 字体:[增加 减小] 类型:转载 时间:2014-11-20我要评论 这篇文章主要介绍了Lua中的string库(字符串函数库)总结,本文讲解了string库 ...
- Lua中的一些库(1)
[数学库] 数学库(math)由一组标准的数学函数构成.这里主要介绍几个常用的函数,其它的大家可以自行百度解决. 三角函数(sin,cos,tan……)所有的三角函数都使用弧度单位,可以用函数deg( ...
- Lua中的字符串函数库
字符串库中的一些函数是非常简单的: string.len(s) 返回字符串s的长度:string.rep(s, n) 返回重复n次字符串s的串:你使用string.rep( ...
- 引用kernel32.dll中的API来进行串口通讯
串口通讯可以引出kernel32.dll中的API来操作,相关源码如下:using System;using System.Runtime.InteropServices; namespace Tel ...
- lua中得栈
如果你看了LUA的文档,那么就应该很清楚LUA与C交互数据时都是用到LUA中所谓的stack.那么当我调用lua_open函数之后栈是什么样的呢?空的(luaopen_base等会往栈上加进一些东西) ...
- c调用 lua 栈操作
转自https://www.cnblogs.com/ringofthec/archive/2010/10/22/lua.html 打算记录一些lua_api, 可能会觉得lua文档中已经说的很清楚了, ...
- Lua的栈及基本栈操作
Lua的栈及基本栈操作 https://blog.csdn.net/mydriverc2/article/details/51134737 https://blog.csdn.net/mydriver ...
- Lua和C++交互 学习记录之二:栈操作
主要内容转载自:子龙山人博客(强烈建议去子龙山人博客完全学习一遍) 部分内容查阅自:<Lua 5.3 参考手册>中文版 译者 云风 制作 Kavcc vs2013+lua-5.3.3 1 ...
随机推荐
- 【推荐系统】知乎live入门
参考链接: 知乎推荐系统live:姚凯飞推荐系统live 目录 1.推荐概览与框架 2.细节补充 3.召回 4.排序 5.常用技能与日常工作 5.用户画像-特征工程 6.相关经验 7.推荐考试拿分路径 ...
- vue回到顶部
backTop() { var top = document.body.scrollTop || document.documentElement.scrollTop; this.duration - ...
- Lamabda Where Select Find First等区别
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...
- vsftp 主动模式安装
server:192.168.109.137 client:192.168.109.138 ------------------------------------------------------ ...
- CSS3 nth-of-type(n)选择器 last-of-type选择器 nth-last-of-type(n)选择器 CSS3 only-child选择器 only-of-type选择器
CSS3 nth-of-type(n)选择器 “:nth-of-type(n)”选择器和“:nth-child(n)”选择器非常类似,不同的是它只计算父元素中指定的某种类型的子元素.当某个元素中的子元 ...
- opencv 环境配置-windowsx64 +VS2017
opencv版本为4.1.1官方最新版本, https://sourceforge.net/projects/opencvlibrary/ 先配置本地工程环境: 右键我的电脑-属性 将bin的路径添加 ...
- 对webpack的初步研究1
一.概念: 1.webpack的核心是用于现代JavaScript应用程序的静态模块捆绑器.当webpack处理您的应用程序时,它会在内部构建一个依赖关系图,它映射您的项目所需的每个模块并生成一个或多 ...
- 关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法
关于python3 使用pycharm+unittest+html+HTMLTestRunner 测试用例运行正常,但却不能生成测试报告的解决方法 这个问题我也遇到过,以下是解决办法 该方法适用于 ...
- 重置Jenkins的构建历史
1.重置单个JOB的构建历史item = Jenkins.instance.getItemByFullName("your-job-name-here") //THIS WILL ...
- sql2000如何完美压缩.mdf文件
--收缩数据库 dbcc shrinkdatabase('test_db') , ) --数据文件mdf , ) --日志文件ldf ) --更新