这几天开了个小差, 把lua的很多扩展库都用了一下, luasocket, luasql, luacom, kepler... 最后终于理解了require的作用了. 其实也就是pil提及到的搜索加载目录那么简单,当然有一个经验就是定义LUA_PATH与package.cpath的值,就像定义include和lib的路径一样, 可以方便地导入到lua环境 :)
本来打算用luasql的odbc库来做数据库访问的开发, 执行sql语句, 游标以及事务都成功了, 唯独执行带参数的存储过程不知道怎么搞, 这可郁闷了我很久. 由于对odbc不熟, 就查了下msdn文档, 后面看看luasql的源码发现于根本没有支持存储过程的参数. 看来要么就要自己在luasql的基础上扩展下,要么就要放弃它了. 手头上的事很多, 先放放,搞清楚一下odbc再说.
现在又回到了pil专注lua的语法了. table真的很cool,可以轻松实现稀疏矩阵, 串, 队列(单双向), 栈,集合以及各种其它的数据结构, 而且非常好用. metatables和metamethods确实很酷, 利用这些东西可以实现运算符重载(看上去像), 继承(单/多),封装, getter/setter等等. 暂时还没有看到类的那一章. 有了前面的内容,怎么用__index定义原型链构造一个类的继承体系, 加上package, 应该八九不离十了,先意淫一把.
忘了补充一下, 5.1 c api 中的 luaopen_*现在和lua调用其它普通c函数的过程一样:
lua_pushcfunction(L, luaopen_*);
lua_call();
也可以用
lua_cpcall(L, luaopen_*, 0); 简化上面两步的操作, 实际了看lua_cpcall的源码就知道,是一样的
那么现在5.1推荐的开始调用lua的写法是这样的:
lua_State *L = luaL_newstate();
lua_cpcall(L, luaopen_base, 0);
lua_cpcall(L, luaopen_io, 0);
lua_cpcall(L, luaopen_string, 0);
// ...
// ...
相关推荐
在 RAP 里把编号这件事做得既优雅又合规:Early Numbering 与 Late Numbering 的落地指南
本文探讨了 SAP RAP 框架中的三种主键编号策略及其适用场景。文章首先指出传统 ABAP 应用中主键处理的局限性,详细分析了早期编号(外部/内部)和延迟编号的差异,强调延迟编号在避免业务断号方面的优势。通过 Partner 业务对象案例,文章演示了延迟编号的实现方法,包括行为定义配置、保存类实现和编号分配逻辑。同时指出测试中常见的校验陷阱,并提醒生产环境应避免简单的 MAX+1 方案,建议采用原子取号机制确保并发安全。全文从业务合规性和技术实现两个维度,为 RAP 应用的编号策略选择提供了实用指导。
Lua: lua_call/lua_pcall/lua_cpcall的用法
函数原型: 1)void lua_call (lua_State *L, int nargs, int nresults); L是执行环境,可以理解为当前栈,nargs参数个数,nresults返回值个数。 2)void lua_pcall(lua_State *L,int nargs, int nresults,int nerrfunc); lua_pcall和该函数区别是多一个
face.py人脸识别打卡
调用笔记本内置摄像头、 从摄像头读取图片、转为灰度图片、检测人脸、保存图像、保持画面的持续得到n个样本后退出摄像人脸用vector保存各个人脸的坐标、大小(用矩形表示)、minSize和maxSize用来限制得到的目标区域的范围、将获取到的打卡时间重新做一个表格
lua C API
1:lua_pcall vs lua_call and lua_cpcall 与lua_call相对应的是lua_pcall函数,lua_pcall会以保护模式调用栈中的函数。以保护模式调用意思是,当被调用的函数发生任何错误时,该错误不会传播,不像lua_call会把错误传递到上一层,lua_pcall所调用的栈中函数发送错误时,lua_pcall会捕捉这个错误,并向栈中压入一个错
Lua与C的交互
Lua 与 C 的交互 Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库。 C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成: 1、 读写Lua全局变量的函数; 2、 调用Lua函数的函数; 3、 运行Lua代码片段的函数; 4、 注册C函数后可以在Lua中被调用的函数; 在C和LUA之间交互的关键在...
Lua C API 的正确用法【written by 云风】
刚学LUA,有点迷糊,找个文章看看,才知道,把lua嵌入到C里面,做的完美也不是件容易的事。文章,地址http://blog.codingnow.com/2015/05/lua_c_api.html 云风的 BLOG 思绪来得快去得也快,偶尔会在这里停留 « sproto 的缺省值处理 | 返回首页 | 卡通图片的压缩 »
Lua学习(四)Lua的其他特性
Lua学习(四)Lua的其他特性 目录 Lua学习(四)Lua的其他特性 前言 一、Lua的多重继承 二、Lua私密性 三、弱引用table 1、内存管理考虑用弱引用回收 2、弱引用的三种方式 总结 前言 Lua与其它语言一样能够实现一些重要的特性,比如多继承、私密性以及垃圾回收等。具体怎么实现让我们来深入认识一下。 一、Lua的多重继承 根据Lua的继承方式(通过元表中查找自己不存在的字段)进行理解,Lua的多继承无非是在多个table中查找...
【Lua】 Lua学习笔记(四)
【Lua】 Lua学习笔记(四)
Lua学习之四循环
代码及输出:代码 --循环 --任何地方调用break都可以退出循环 --while循环 --[[ while(condition) do statements end ]] --for循环 --[[ var初始值exp1,结束点为exp2,每次增长数为exp3,不写exp3则默认为1 for var=exp1,exp2,exp3 ...
Lua学习篇④——循环
我一直认为循环的出现是开启了IT新时代的大门,这区别了人与机器的最大不同,让我们敲一次键盘上的‘A’键很简单,但让我们每1秒钟敲一次且24小时不停歇,可能你在半小时后就坚持不下去了~让机器来代替我们做这些有规律的重复劳动,这就是循环的意义。大多数情况下,编程中我们必不可少都会需要用到循环。循环语言由循环体和循环条件所构成,在Lua中有以下几种循环的结构:for循环Lua中for循环的基本格式为fo...
lua_gc 源码学习四
今天来看一下 mark 过程是怎样实现的。 所有的 GC 流程,都从 singlestep 函数开始。singlestep 就是一个最简单的状态机。GC 状态简单的从一个状态切换到下一个状态,循环不止。状态标识放在 global state 的 gcstate 域中。这一点前面谈过。 开始的两个状态和 mark 过程有关。 初始的 GCSpause 状态下,执行 markroot 函数。我们
Lua基础学习(四)
上一篇: Lua基础学习(三)https://blog.csdn.net/sun_zeliang/article/details/86677031 Lua元表 元表的作用 在Lua中,每个值通常都有一套预定义的操作集合,例如数字的相加,字符串的连接。而table比较特殊,没有办法直接将两个table相加,没有办法对函数作比较,也没有办法调用一个字符串,这个时候就需要元表来完成。 元...
Lua学习笔记四
Lua学习笔记四 通过上一节的知识,我们学会了如何利用表来作为参数,这样我们能实现的功能更多了。但是有一点是没有涉及到的,那就是返回值,而返回值的讨论不能不提userdata类型。 本节的目的:讨论如何处理Lua返回值和Userdata类型的应用。 本章涉及一些Allegro的知识,但是这不是重点。所以当你看到不熟悉的代码段时,不必太在意,把注意力放在编写Lua函数的套路上
Lua学习四
if condition then then-part end if condition then then-part else if condition then then-part else else-part end
Lua学习笔记四之用C为Lua定义类型(UserData)
继续学习Lua与C交互,下面是在用C为Lua定义类型(UserData)的笔记以及自己的理解,其中学习过程中的写的测试代码都可以从我的github下载。 0、Lua中使用userdata类型来表示在C中定义的类型。userdata只是提供了一块原始的内存区域,可以用来存储任何东西,并且,在lua中userdata没有任何预定义的操作。在C中调用函数lua_newuserdata会根据指
Lua学习笔记(四)
九、编译、执行与错误 Lua尽管是一种解释型语言,但也允许它在运行源代码之前预编译成一种中间形式。但解释型语言的特征在于,编译器是语言运行时的一部分,并且有能力执行动态生产的代码。因此执行编译产生的中间码速度更快。 1、编译 前面介绍到dofile函数用于执行代码块。但dofile实际上是调用loadfile实现的。dofile加载并执行文件,而loadfile只加载文件进行编译,而不执行。
深入学习Redis_(四)Redis与Lua脚本
文章目录上一章一、Lua介绍1. 应用场景2. Linux安装Lua3. 简单了解LuaLua关键字定义变量Lua中的数据类型流程控制函数require 函数二、Redis整合Lua脚本原子性EVAL方法三、RedisTemplateLua整合Lua脚本构造脚本执行脚本第一种方式:脚本直接写在代码中,String类型第二种方式:脚本单独写在lua文件中四、 Redis分布式锁结合Lua脚本获得锁的lua脚本:释放锁的lua脚本: 上一章 深入学习Redis_(一)五种基本数据类型、RedisTemplate
四、一起学习Lua 数据类型
userdata是一种用户自定义数据,用于表示一种由应用程序或C/C++语言库所创建的类型,可以将任意C/C++的任意数据类型的数据(通常是struct和指针)存储到Lua变量中调用。https。
四、学习Lua 数据类型
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
四、Lua 数据类型的学习
userdata 是一种用户自定义数据,用于表示一种由应用程序或 C/C++ 语言库所创建的类型,可以将任意 C/C++ 的任意数据类型的数据(通常是 struct 和 指针)存储到 Lua 变量中调用。
1794




被折叠的 条评论
为什么被折叠?



