当前位置: 首页 > news >正文

Lua学习笔记

Lua学习笔记

这是我高中时期学习Lua时做的入门笔记,发出来当个备份而已。

我本人现在并不使用Lua!

1、 Lua是巴西里约热内卢天主教大学里的一个由Roberto IerusalimschyWaldemar CelesLuiz Henrique de Figueiredo三人所组成的研究小组于1993年开发的。


2、 Lua的特点:为嵌入式服务,为可拓展服务。


3、 Lua由标准C语言编写。


4、.lua:Lua源文件后缀名。


5、 Lua的注释:

--:单行注释。--[[--]]:多行注释。

6、Lua的标识符命名规则与C相近,但要留意:

最好不要使用下划线加大写字母的标示符,因为Lua的保留字也是这样的。

Lua 不允许使用特殊字符如 @, $, 和 % 来定义标示符

​ Lua 是一个区分大小写的编程语言。


7、Lua的关键字有22个:

and:与运算。
break:跳出语句。
do:用在while、for、if中,声明执行代码。
else:其他条件。
elseif:其他子条件。
end:结束标志。
false:0。
for:For循环。for循环前两参是区间,第三可选参为步长。
function:函数。
if:如果。
in:在遍历中指名遍历对象。
local:显示声明局部变量。
nil:0。
not:非运算。
or:或运算。
repeat:块循环。
return:返回。
then:用在if语句中,用来隔离条件和执行代码。
true:1。
until:与repeat构成块循环。
while:条件循环。
goto:跳转语句。


8、 在Lua中,变量总是认为是全局的


9、 如果想删除一个全局变量,只需要将变量赋值为nil。nil相当于C语言中的NULL。


10、 Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。


11、Lua 基本类型(8):

nil:表示一个无效值。
boolean:布尔类型。
number:双精度类型。
string:字符串。
userdata
function:由 C 或 Lua 编写的函数。
thread:线程。
table:相当于Python里的字典。用“{}”构建。table没有固定大小,它是可变长的。


12、 可以使用 type 函数测试给定变量或者值的类型。


13、pairs():定义迭代器。


14、 可以用 2 个方括号 “[[]]” 来表示"一块"字符串。


15、 字符串连接使用的是..


16、 使用#来计算字符串的长度,放在字符串前面。


17、 在 Lua 里表的默认初始索引一般以 1 开始。


18、 线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会暂停。


19、 Lua 可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。


20、 对 table 的索引使用方括号 []。Lua 也提供了.操作。


21、 ipairs是Lua提供的一个迭代器函数,用来迭代数组。


22、 Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 … 表示函数有可变的参数。


23、 可以通过select("#",...)来获取可变参数的数量。


24、select(n, …)用于返回从起点 n 开始到结束位置的所有参数列表。


25、Lua的算术运算符(7)。

+:加法。
-:减法 或负号。
\*:乘法。
/:除法。
%:取余。
^:乘幂。
//:整除运算符(结果无小数)。


26、Lua的关系运算符。

==:等于。

~=:不等于。

>:大于。

<:小于。

>= :大于等于。

<=:小于等于。


27、Lua的逻辑运算符。

and:逻辑与操作符。谁错返回谁。
or:逻辑或操作符。谁对返回谁。
not:逻辑非操作符。与逻辑运算结果相反。


28、转义字符。

\a:响铃(BEL)。
\b:退格(BS) 。
\f:换页(FF)。
\n:换行(LF) 。
\r:回车(CR) 。
\t:水平制表(HT)。
\v:垂直制表(VT)。
\:代表一个反斜线字符。
\':代表一个单引号(撇号)。
\":代表一个双引号字符。
\0:空字符(NULL)。
\ddd:1到3位八进制数所代表的任意字符三位八进制。
\xhh1到2位十六进制所代表的任意字符。


29、Lua的字符串函数。

string.upper(a):字符串a全部转为大写字母。
string.lower(a):字符串a全部转为小写。
string.gsub(m,f,r,n):在m字符串里面找到f字符串把f替换成r字符串,n为替换次数(可忽略)。
在字符串中替换。
string.find (s, u, [i], [p]):在字符串s中找到u,如果找到就会返回这个子串的起始索引和结束索引,不存在则返回nil。i指定了搜索的起始位置,默认为 1,可以一个负数,表示从后往前数的字符个数。p表示是否以正则表达式匹配。i、p均为可选项。
string.reverse(a):字符串反转。
string.format(...):当做printf函数使用。
string.char(a):输入数字a返回数字对于的字符。
string.byte(A,[i]):输入数字A返回字符对于的数字(可以指定某个字符,默认第一个字符)。
string.len(a):计算字符串a长度。
string.rep(s, n):返回字符串s的n个拷贝
string.gmatch(s, p):返回一个迭代器,每一次调用这个函数,返回一个在字符串 s 找到的下一个符合 p 描述的子串。如果参数 p 描述的字符串没有找到,迭代函数返回nil。
string.match(s, p, [i]):与string.gmatch(s, p)功能相似(但返回值不同)。参数i可选, 指定搜寻过程的起点, 默认为1。
string.sub(s,b,[f])用于截取字符串。s:要截取的字符串。b:截取开始位置。f:截取结束位置,默认为 -1,最后一个字符。


30、 格式字符串转义码。

`%c`:字符通道。 `%d, %i`:有符号的整数通道。 `%o`:八进制数通道。 `%u`:无符号整数通道。 `%x`:十六进制数通道。 `%X`:十六进制数通道。 `%e`:科学记数法通道。 `%E`:科学记数法通道。 `%f`:浮点数通道。 `%g(%G)` :%e或%f通道。 `%q`:Lua编译器读入通道。 `%s`:字符串通道。

31、 字符类:可以匹配一个特定字符集合内任何字符的模式项。

.(点):与任何字符配对。

%a:与任何字母配对。

%c:与任何控制符配对(例如\n)。

%d:与任何数字配对。

%l:与任何小写字母配对。

%p:与任何标点(punctuation)配对。

%s:与空白字符配对。

%u:与任何大写字母配对。

%w:与任何字母/数字配对。

%x:与任何十六进制数配对。

%z:与任何代表0的字符配对。

%x(此处x是非字母非数字字符):与字符x配对. 主要用来处理表达式中有功能的字符(^、$、()、%、.、[]、*、+、-、?)的配对问题, 例如%%与%配对。

​ 当上述的字符类用大写书写时, 表示与非此字符类的任何字符配对. 例如, %S表示与任何非空白字符配对。

​ 上述匹配模式可放入中括号中,表示多匹配。在中括号中不匹配谁就在谁的前面加“^”号。


32、 数组:没有键值对的表。


33、 table函数:

table.concat (t,[s],[b],[e]):列出指定t的数组部分从s位置到e位置的所有元素, 元素间以指定的分隔符(s)隔开。

table.insert (t, [p], v):在t的数组部分指定位置§插入值为v的一个元素。

table.maxn (t):指定t中所有正数key值中最大的key值。如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)。

table.remove (t,[p]):返回t数组部分位于p位置的元素. 其后的元素会被前移。pos参数可选, 默认为table长度, 即从最后一个元素删起。

table.sort (t,[c]):对给定的table进行升序排序。


34、 Lua模块:把数据和函数放到一个table中,使其成为table的元素。这个table就可以当成模块。


35、require("模块"):加载模块。执行 require 后会返回一个由模块常量或函数组成的table,并且还会定义一个包含该 table 的全局变量(即可用变量来捕捉)。传入的模块如果带有目录,则用“.”分隔。


36、loadlib("路径","函数"):加载库。


37、 _G:一个内置table,里面放了所有的全局变量。


38、tostring(n):把数字n变成字符。


39、tonumber(c)把字符c变成数字。


40、 元表:有定义了元方法的表,这个表用来定义已“__”开头的函数,它是谁的元表,谁的特定操作就由它来定义。元表里面定义了一个表在进行特殊行为时的后备解决方案。


41、 元方法:在 Lua中我们可以访问对应的键来得到值,但是却无法对两个 table 进行操作(比如相加)。元方法就是定义两个table的行为,元方法定义在元表里。


42、setmetatable(t,m): 把m设成t的元表,也就是表t的某些操作由m里面定义的元方法决定。


43、getmetatable(t): 返回表t的元表。


44、 元表支持定义的元方法:

__add:对应的运算符 ‘+’。
__sub:对应的运算符 ‘-’。
__mul:对应的运算符 ‘*’。
__div:对应的运算符 ‘/’。
__mod:对应的运算符 ‘%’。
__unm:对应的运算符 ‘-’。
__concat:对应的运算符 ‘…’。
__eq:对应的运算符 ‘==’。
__lt:对应的运算符 ‘<’。
__le:对应的运算符 ‘<=’。
__index:它可以是一个函数也可以是一个表。用来在当在一个表找不到特定索引时的解决方案。


46、goto语句:goto直接加上一个标签。但在定义标签时标签的左右两边都要加上一个“::”。


47、os.exit():退出。


——谙弆悕博士(Ailan Anjuxi)

http://www.jsqmd.com/news/790894/

相关文章:

  • 9大网盘直链下载助手完整指南:告别限速,一键获取真实下载地址
  • Windows键盘自定义终极指南:5分钟掌握SharpKeys键位映射技巧
  • Simulink建模进阶:Relay模块的缓冲区机制与嵌入式代码实现
  • DXVK 2.7.1:突破性跨平台Direct3D到Vulkan转换层的架构演进
  • 终极免费解决方案:九大网盘直链下载助手完整使用指南
  • FFmpeg GUI终极指南:3分钟学会图形化音视频处理
  • 别再手动改网表了!用这个免费工具5分钟搞定Altium Designer到Allegro的转换
  • PIDtoolbox完全指南:如何用可视化工具快速解决无人机PID调参难题
  • 2026Q1数字实测内蒙古GEO品牌推广避坑指南 - 年度推荐企业名录
  • 2025技术革新:如何用开源脚本打破网盘壁垒实现一站式文件管理?
  • StardewXnbHack:43秒极速解压星露谷物语XNB文件的终极工具
  • AI驱动的广告追踪验证:告别数据黑盒,保障营销ROI
  • CANopen设备配置实战:手把手教你用Python-canopen库读写EDS文件中的对象字典
  • 观察Taotoken用量看板如何帮助控制月度Token消耗
  • 为梦想再赴一程,济南中考复读择校攻略 - 速递信息
  • 鸿蒙 PC + 手机 + 平板:一次真正的多端应用实战
  • 企业如何利用Taotoken构建内部统一的AI能力中台与调用网关
  • RAG/LLM安全扫描器实战指南:从威胁解析到自动化防御
  • 如何实现Blender到虚幻引擎的无缝数据迁移:终极转换指南
  • 网盘直链下载助手终极指南:告别限速,轻松获取九大网盘高速下载链接
  • 2026Q1内蒙古合规GEO优化推广:数字选型实测 - 年度推荐企业名录
  • 终极解决方案:WindowResizer - 免费高效的Windows窗口强制调整工具
  • 别做外卖代运营了:帮餐饮店处理差评,反而更容易月付
  • 如何快速上手N_m3u8DL-RE:跨平台流媒体下载终极指南
  • 从数字失忆到数字永恒:WeChatMsg如何让你的微信聊天记录重获新生
  • 现在不掌握AI原生推荐的因果建模能力,2026Q3起你的推荐系统将被判定为“非智能体”——奇点大会技术合规白皮书预警
  • 开源抖音下载器终极指南:从零掌握高效批量内容提取技巧
  • 5分钟快速诊断鼠标性能:MouseTester免费工具完整指南
  • API中转站统一管理工具:基于Electron的自动化运维实践
  • CFD模拟结果总不对?可能是你忽略了‘膨胀粘度项’:一个在可压缩流中至关重要的细节