lua简介

Lua是一个可扩展的嵌入型脚本语言

  • 嵌入式语言:基于ANSI C实现,基本上每种编程语言都有调用C函数的方法,因此可以在所有这些语言中使用Lua。包括C++、Go、Rust、Python
  • 解释型语言:Lua会先编译成字节码,然后在Lua虚拟机上解释执行这些字节码。保证了可移植性
  • 动态类型语言:Lua本身没有定义类型,不过语言中的每个值都包含着类型信息

语法规范

编码风格

  • 标识符(或名称):是由任意字母、数字、下划线组成的字符串(不能以数字开头)

  • 下划线+大写字母:通常被用作特殊用途。如:_Version

  • 大小写敏感。如And和AND是两个不同的标识符

注释

单行注释:

-- 注释内容

多行注释:

--[[
注释内容
]]--[[
注释内容
--]]

--[[
注释内容
]]

取消注释:

---[[
注释内容
]]

变量:

变量默认是全局变量,即直接写变量名即为全局变量,局部变量的定义需要加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,传参调用

local a = "aaa"
local a_len = utf8.len(a)
 
local b = "你好"
local b_len1 = utf8.len(b)
local b_len2 = #b
local b_len3 = string.len(b)
 
print("a_len:" .. a_len .. ", b_len1:" .. b_len1 .. ", b_len2:" .. b_len2 .. ", b_len3:" .. b_len3)
 
-- 输出
-- a_len:3, b_len1:2, b_len2:6, b_len3:6

源文件utf-8

字符串连接

.. :不能操作nil类型

字符串连接操作符,在连接多个操作时实际会创建字符串的多个副本,会大量使用该操作符时会带来内存和CPU的开销

长字符串

[[长字符串]]

local a = [[
adfadfadfadf,
hello world
{
    "conio":1,
    "b":2,
    "c": [
        1,2,3
    ]
 
}
]]
 
print(a)

字符串标准库常用的方法

gsub 字符串替换函数,用于查找和处理替换内容

string.packstring.unpack 用于在二进制数据和Lua的基本类型值之间进行转换的函数。pack把值打包成二进制字符串,unpack从二进制字符串中提取这些值

utf8库 :从Lua5.3开始,lua引入了一个用于操作UTF-8编码的Unicode字符串的标准库

模式匹配


table

table是数据结构

是Lua里面主要的数据结构,用来实现其他语言中的常见的数据结构:Map、集合、数组、记录等

遍历

使用 parisipairs遍历一个 table

标准库

table的标准库,用于操作table。常见的api有:table.insert, table.remove, table.move, table.sort

元表和元方法

Lua设计了元表和元方法,目的在于:用于拓展任意值在面对一个位置操作时的行为

function

function在Lua语言是lua是“第一类值”,Lua中所有的函数都是匿名的,不仅可以存储在全局变量中,还可以存储在表字段和局部变量中。

参考文章

https://developer.aliyun.com/article/836104

评论