Lua学习笔记

Lua学习笔记

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

我本人现在并不使用Lua!

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


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


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


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


5、 Lua的注释:

python 复制代码
--:单行注释。
--[[  --]]:多行注释。

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位八进制数所代表的任意字符三位八进制。

​ \xhh 1到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)

相关推荐
杨逢昌工厂6S管理几秒前
109-杨逢昌车间管理负熵循环:三环体系持续输出负熵的机制解析
经验分享·笔记·职场和发展·学习方法
weixin_440730502 分钟前
内置函数、json文本、pickle二进制
开发语言·python·json
inferno9 分钟前
SVN学习笔记(二)
笔记·学习·svn
殷色玫瑰9 分钟前
C++ string类详解:常用接口、字符串操作与模拟实现
java·linux·c语言·开发语言·数据结构·c++
李游Leo13 分钟前
HarmonyOS 7 + Spatial Recon Kit-C++:3DGS 高斯参数的非有限值隔离与可渲染性门禁【鸿蒙心迹】
开发语言·c++·3d·harmonyos
传奇开心果编程30 分钟前
【ArkUI进阶练中学】第12课:应用架构演进与遗留系统迁移
学习·ui·华为·harmonyos
我想我不够好。30 分钟前
装一个纯净的系统
学习
Code_Solitude1 小时前
C语言:关于二维数组的作业总结
java·c语言·前端
时间的拾荒人1 小时前
Qt 文件操作详解:从基础类到读写实战
开发语言·qt·面试
Wang's Blog1 小时前
Java 项目实战: 外卖平台优化-YApi接口管理平台与文档导入导出
java·开发语言·yapi