三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Lua学习笔记

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的注释:

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

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)

← 返回列表