lua简介
Lua是一个可扩展的嵌入型脚本语言
- 嵌入式语言:基于ANSI C实现,基本上每种编程语言都有调用C函数的方法,因此可以在所有这些语言中使用Lua。包括C++、Go、Rust、Python
- 解释型语言:Lua会先编译成字节码,然后在Lua虚拟机上解释执行这些字节码。保证了可移植性
- 动态类型语言:Lua本身没有定义类型,不过语言中的每个值都包含着类型信息
语法规范
编码风格
标识符(或名称):是由任意字母、数字、下划线组成的字符串(不能以数字开头)
下划线+大写字母:通常被用作特殊用途。如:_Version
大小写敏感。如And和AND是两个不同的标识符
注释
单行注释:
1 | -- 注释内容 |
多行注释:
1 | --[[ |
取消注释:
1 | ---[[ |
变量:
变量默认是全局变量,即直接写变量名即为全局变量,局部变量的定义需要加local关键字修饰
全局变量:g_var
局部变量:loc_var
Lua基本类型
nil
空,变量定义出来在第一次赋值之前是空的,目的用于告诉lua它是没有初始化的。nil在lua里面只有赋值操作=
,和判断操作==
、~=
才有效。其他操作符都会报错
number
Lua5.3之前:所有数值都是双精度浮点格式
Lua5.3之后:int 64位整型、double双精度浮点。
精简Lua模式:int 32位整型、float单精度浮点
string
Lua中的字符串可以存储包括空字符在内的所有数值代码。所以可以在字符串中存储任意的二进制数据。
可以使用编码方式(UTF-8)来存储unicode字符串
获取长度
#字符串
: 可以直接获取
string.len(字符串)
: 要先查找string(table)
再找其下的len,传参调用
1 | local a = "aaa" |
源文件utf-8
字符串连接
..
:不能操作nil类型
字符串连接操作符,在连接多个操作时实际会创建字符串的多个副本,会大量使用该操作符时会带来内存和CPU的开销
长字符串
[[长字符串]]
1 | local a = [[ |
字符串标准库常用的方法
gsub
字符串替换函数,用于查找和处理替换内容
string.pack
和string.unpack
用于在二进制数据和Lua的基本类型值之间进行转换的函数。pack把值打包成二进制字符串,unpack从二进制字符串中提取这些值
utf8
库 :从Lua5.3开始,lua引入了一个用于操作UTF-8编码的Unicode字符串的标准库
模式匹配
table
table是数据结构
是Lua里面主要的数据结构,用来实现其他语言中的常见的数据结构:Map、集合、数组、记录等
遍历
使用 paris
和ipairs
遍历一个 table
标准库
table
的标准库,用于操作table。常见的api有:table.insert
, table.remove
, table.move
, table.sort
元表和元方法
Lua设计了元表和元方法,目的在于:用于拓展任意值在面对一个位置操作时的行为
function
function在Lua语言是lua是“第一类值”,Lua中所有的函数都是匿名的,不仅可以存储在全局变量中,还可以存储在表字段和局部变量中。