Lua学习笔记

Lua学习笔记

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

我本人现在并不使用Lua!

1、 Lua是巴西里约热内卢天主教大学里的一个由Roberto IerusalimschyWaldemar CelesLuiz 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)

相关推荐
Data_Journal1 小时前
2026年十大数据集网站
大数据·开发语言·数据库·人工智能·python
cui_ruicheng1 小时前
Linux线程(三):线程同步、互斥与生产者消费者模型
linux·服务器·开发语言
minglie11 小时前
zynq的栈监控与Xil_XXXAbortHandler问题排查
学习
qq3862461961 小时前
C语言中将数字转换为字符串的方法
c语言·格式化输出·字符串转换·sprintf·snprintf
CryptoPP1 小时前
解锁股票数据可视化新姿势:轻量级数据接口与动态图表实践
大数据·开发语言·人工智能·信息可视化·金融·区块链
Understanding_movies1 小时前
【Agent学习】Day13
学习
峥嵘life1 小时前
2026 五一赣州两日游记录:宋城夜色入梦,七鲤古意寻踪
学习
xqqxqxxq1 小时前
多线程、进程与JVM 技术笔记
jvm·笔记
cui_ruicheng1 小时前
Linux线程(二):pthread 线程库与线程控制
java·开发语言·jvm